我正在尝试构建一个匹配转义字符串的正则表达式,比如@"hello""world"。到目前为止,我已经(忽略空白):
@(?=")" #at sign if followed by double quote then double quote
(?> #atomic
""
|
[^"]
)*
"问题是无效的(因为它不是封闭的)字符串@"""匹配为@""。我认为当我使用原子分组,也就是非回溯子表达式时,(?>""|[^"])*将匹配@"""的最后两个双引号(因为左边的替代方案可以匹配两个双引号),然后导致总体匹配失败(因为正则表达式的最后一个"不存在),但是组似乎还不够贪婪(尽管有贪婪的量词*和原子分组),并且只要注意到正则表达式失败,它仍然会回溯到正则表达式的第一个"之后。一种解决方法是将(?!")放在正则表达式的末尾,但我想知道为什么它不能与原子分组一起工作。
发布于 2012-08-31 22:13:15
问题
与最后两个引号不匹配!匹配始终从左侧开始。当需要回溯时(因为令牌不匹配),那么最后一个令牌会默认弹回。但是,当使用原子组时,整个组都会弹出,而不仅仅是组的最后一个令牌。这是用来避免。
解决方案
将字符串的末尾放在末尾:
@(?=")"(?>""|[^"])*"$https://stackoverflow.com/questions/12216735
复制相似问题