我使用此模式匹配解析器中的单引号字符串:
"'.+?'"
但我需要正则表达式,可以找到单引号字符串与postgres像单个qoutes逃逸(加倍单qoutes)。需要匹配这样的东西:
"'first', 'sec''ond', 't''hi''rd'"
我想找到以单引号开头和结尾的字符串的最短匹配,因此上面的字符串意味着3个子字符串:
'first'
'sec''ond'
't''hi''rd'
答案 0 :(得分:4)
当然,'(?:[^']|'')*'
是正确的工作正则表达式:它匹配ExpiresActive On
ExpiresByType application/javascript "access plus 30 days"
后跟零个或多个字符而不是'
或双'
s后跟一个尾随'
。
但是,为了提高效率,您可以使用unroll-the-loop technique 展开。
'
请参阅the regex demo并注意regexp查找所有匹配所需的步骤。
正则表达式可以读作
'[^']*(?:''[^']*)*'
- 匹配'
'
- 然后是[^']*
'
- 然后是(?:''[^']*)*
的零个或多个序列,后跟除''
以外的零个或多个字符'
- 然后匹配尾随'
。这个正则表达式具有线性模式,尽可能少的回溯。
请注意:如果添加前瞻检查是否存在'
或尾随后的字符串结尾,您仍然可以为当前方案执行您的正则表达式工作{{ 1}}:
,
请参阅regex demo。但是,它与依赖于上下文的正则表达式相关且效率较低。
答案 1 :(得分:2)
答案 2 :(得分:1)
对于您提供的模式,这应该有效:
'[\w']+'
匹配单引号后跟一个或多个非空格或单引号,后跟最后一个单引号。