正则表达式原子分组不够贪婪
我正在尝试构建一个正则表达式,它匹配@"hello""world"
等转义字符串。 到目前为止,我已经(忽略空格):
@(?=")" #at sign if followed by double quote then double quote
(?> #atomic
""
|
[^"]
)*
"
问题是无效的(因为它未关闭)字符串@"""
的匹配,而@""
我认为,当我使用原子团又名nonbacktracking子表达式即可。 (?>""|[^"])*
将匹配最后两个@"""
双引号(因为左边的选项可以匹配两个双引号),然后导致总体匹配失败(因为最后一个"
正则表达式不存在“),但该组似乎不会不要贪婪(虽然有贪婪的量词*
和原子分组),并且在注意到正则表达式失败后仍然会回到第一个"
正则表达式"
后面的点。解决方法是将(?!")
在正则表达式的结尾,但我想知道为什么它不适用于原子分组。
问题
原子分组不匹配最后两个引号! 匹配总是从左侧开始。 当需要回溯(由于不匹配的令牌),则默认情况下最后一个令牌弹出。 但是,当使用原子组时,整个组会弹出而不是仅显示组的最后一个标记。 这用于避免灾难性的退路 。
解
在末尾放置字符串的末尾:
@(?=")"(?>""|[^"])*"$
链接地址: http://www.djcxy.com/p/12971.html