我需要在重复时使用后面的外观,但它看起来并不支持。有替代语法吗?
目的是匹配'第三'当它跟随'第一'和任意数量的' R'秒'
没有重复字符,这会编译,但显然无法匹配。
SELECT 'FirstRRRRRSecondThird' AS inputString,
REGEXP_INSTR(inputString,'(?<=FirstRSecond)Third',1);
但是当我尝试添加重复时,我得到了指定的模式不是有效的模式。&#39;
SELECT 'FirstRRRRRSecondThird' AS inputString,
REGEXP_INSTR(inputString,'(?<=FirstR+Second)Third',1);
另外,{1,M}失败
SELECT 'FirstRRRRRSecondThird' AS inputString,
REGEXP_INSTR(inputString,'(?<=FirstR{1,}Second)Third',1);
这是一个非常普通的正则表达式,因此它似乎不太受支持。
答案 0 :(得分:0)
看看:https://www.regular-expressions.info/lookaround.html (描述 lookahead 和 lookbehind )并找到标题: 关于Lookbehind的重要说明
第二段以:
开头许多正则表达式,包括Perl使用的那些,(...) 只允许固定长度字符串
所以你不能在任何外观中使用量词。
我认为,规避这种限制的方法是:
示例:
FirstR+SecondThird
FirstR+Second
匹配First
,任意数量的R
个字符
和Second
。Third
匹配Third
。此正则表达式也符合您的意图:Third
在你的帖子中。
顺便说一下:我想你在现实生活中发布了一个简化的正则表达式
而不是First
,Second
和Third
会更复杂
表达式。
补充说明
您可以删除REGEXP_INSTR
(1)的第三个参数,因为它是默认值
价值只是 1 (寻找匹配,从第一个字符开始
源字符串)。