Oracle SQL正则表达式中能否使用?=与?<=限定符?
Oracle SQL正则表达式中?=和?<=的支持情况
嘿,刚好对Oracle SQL的正则语法熟得很,直接给你说清楚:
正向预查(
?=):完全支持
你可以在REGEXP_LIKE、REGEXP_SUBSTR、REGEXP_REPLACE这些核心正则函数里放心用它。比如要匹配所有后面紧跟"fox"的"quick",写法是这样的:SELECT content FROM animal_phrases WHERE REGEXP_LIKE(content, 'quick(?= fox)');这个只会命中"quick fox"里的"quick",单独的"quick"或者"quick dog"里的都不会被匹配到。
反向预查(
?<=):不支持
这是个坑!Oracle的正则引擎属于POSIX扩展正则(ERE)的变种,并不支持PCRE里的反向预查特性。如果你硬写(?<=)的话,直接会报语法错误。比如下面这个写法就会翻车:-- 执行会报错,别试! SELECT content FROM animal_phrases WHERE REGEXP_LIKE(content, '(?<=quick )fox');要是需要类似反向预查的效果,得换个思路——比如用
REGEXP_SUBSTR配合捕获组,或者结合SUBSTR+INSTR来间接实现,具体得看你的业务场景调整。
内容的提问来源于stack exchange,提问作者Alex Yersh
相关产品推荐
相关产品推荐

