我试图找到双点,如果在任何电子邮件中连续出现双点,它应该提示我" NO"
DECLARE
v_email webowner.person.email%TYPE;
v_constant CONSTANT VARCHAR2(300) := '^(([a-zA-Z0-9"_\-])([a-zA-Z0-9_\.\/%+="''\-]*[a-zA-Z0-9])@(\[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}|((([a-zA-Z0-9\-]+)\.)+))([a-zA-Z]{2,}|(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\]))$';
BEGIN
v_email := 'test_sample@mercer.com';
if regexp_like(v_email, v_constant) then
pl('YES: ' || v_email);
else
pl('NO: ' || v_email);
end if;
END;
注意:双点表示连续点,并且在#34之前需要检查双点的存在; @"
尝试使用Regex that does not allow consecutive dots
找不到正确的正则表达式。
请帮助。
答案 0 :(得分:1)
我的直接想法是检查“..”的索引是否小于“@”的索引,并且第一个索引不是-1。
SELECT
CASE WHEN INSTR(v_email, '..') BETWEEN 1 AND INSTR(v_email, '@') - 1
THEN 'dots present'
ELSE 'no dots' END AS dots
FROM yourTable;
我希望这对你有所帮助:)。
答案 1 :(得分:0)
更改此部分:
([a-zA-Z0-9_\.\/%+="''\-]*[a-zA-Z0-9])
对此:
((\.?[a-zA-Z0-9_\/%+="''\-]+)*\.?[a-zA-Z0-9])
所以基本上,如果有任何匹配的点,它们必须穿插一些非点,可接受的字符。这样你永远不会匹配两个连续的。