我使用这种模式来匹配解析器中的单引号字符串:
"'.+?'"
但是我需要可以用postgres查找单引号的正则表达式,例如单qoutes的转义(将单qoutes加倍)。需要匹配以下内容:
"'first', 'sec''ond', 't''hi''rd'"
我想找到以单引号开头和结尾的字符串的最短匹配项,因此上面的字符串表示3个子字符串:
'first'
'sec''ond'
't''hi''rd'
当然,这'(?:[^']|'')*'
是有效的正则表达式:它匹配一个'
后跟零个或多个字符的字符,而不是'
double'
或后跟一个尾数的double '
。
然而,为了使之更有效率,你可以展开使用它UNROLL-的环技术。
'[^']*(?:''[^']*)*'
查看正则表达式演示,并注意正则表达式查找所有匹配项需要执行多少步骤。
正则表达式可以理解为
'
-匹配一个 '
[^']*
-然后是零个或多个其他字符 '
(?:''[^']*)*
-然后是零个或多个序列,''
后跟零个或多个字符,而不是'
'
-然后匹配结尾'
。此正则表达式具有线性模式,涉及尽可能少的回溯。
只是注意:你仍然可以让你对目前的情况正则表达式的工作,如果你添加一个先行检查是否有,
尾随之后的字符串或结尾'
:
'.+?'(?=,|$)
^^^^^^^
请参阅regex演示。但是,它依赖于上下文并且效率不如展开的正则表达式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句