【发布时间】:2015-12-07 18:52:17
【问题描述】:
经过很长时间试图找到一个好的正则表达式来查找,然后用单引号(›‹)替换单引号(''),照顾撇号,我想出了这个:
‘((([^‘]*’)*[^‘]*)+)’
我已经在 PHP Live Regex 上成功测试了它。但是,它只适用于 preg_match,有时也适用于 preg_replace(作为替代,我使用 ›$1‹)。
可能是反向引用的问题吗?有谁知道更好的解决方案?
编辑:
当我尝试更改类似于
的字符串时,我遇到的问题是 灾难性的回溯one ‘two’s’ ‘three’ four
到
one ›two’s‹ ›three‹ four
【问题讨论】:
-
您能提供任何示例字符串吗?另外,您遇到了什么问题?
-
另外,可疑的结果会很有用。
-
随时修改this fiddle 以显示您遇到的问题。
-
是的,它说的是灾难性的回溯! :-( 感谢@stribizhev 的参考,以后会更多地咨询网站。@Num6 预期的结果真的很简单:将
one ‘two’s’ ‘three’ four更改为one ›two’s‹ ›three‹ four -
‘((?:[^‘]*’)*[^‘]*)’是否为您的所有输入字符串修复它?您提供的那个实际上并没有导致灾难性的回溯,但很明显问题在于组内的嵌套量词和可选模式。