我正在尝试在下面给出的正则表达式中添加一个条件,以检查至少有一个特殊字符%
(百分号)以W
开头,还有五个字符可能是在A-Z
,0-9
和%
之间。我试着自己使用LookAhead (?=.*[%])
,但遗憾的是没有为我工作。下面是一个表达式我想检查一个字符串中至少有一个或多个%
字符使用lookahead或其他语法。提前谢谢。
尝试在此表达式上添加前瞻:
Select 'P' from dual Where REGEXP_LIKE('W77%7%','(^W[0-9A-Z%]{5}$)')
尝试:
Select 'P' from dual Where REGEXP_LIKE('W77%7%','^(?=(^%){0,6}) [^W[0-9A-Z%]{5}$]')
尝试:
Select 'P' from dual Where REGEXP_LIKE('W77%7%','^(?=.*%){0,6}) [^W[0-9A-Z%]{5}$]')
答案 0 :(得分:1)
Oracle的正则表达式引擎基本上是POSIX ERE正则表达式,带有一些增强功能,这意味着,除其他外,没有任何外观。但我不确定为什么你需要先行才能确定特定字符串是否包含%
字符。
SELECT 'P' FROM dual
WHERE REGEXP_LIKE('W77%7%', '^W[0-9A-Z%]{5}$')
AND INSTR('W77%7%', '%') > 0;
P.S。如果Oracle 在其正则表达式中支持预测,我认为您要查找的正则表达式将如下所示:
^(?=.*%)W[0-9A-Z%]{5}$
UPDATE 可以在Oracle中使用单个正则表达式执行此操作,但没有其他条件,但它不是很好。基本上,您必须考虑%
的每个可能位置:
SELECT 'P' FROM dual
WHERE REGEXP_LIKE('W77%7%', '^W(%[0-9A-Z%]{4}|[0-9A-Z%]%[0-9A-Z%]{3}|[0-9A-Z%]{2}%[0-9A-Z%]{2}|[0-9A-Z%]{3}%[0-9A-Z%]|[0-9A-Z%]{4}%)');