正则表达式原子分组不够贪婪

我正在尝试构建一个正则表达式,它匹配@"hello""world"等转义字符串。 到目前为止,我已经(忽略空格):

@(?=")"   #at sign if followed by double quote then double quote          
(?>       #atomic
    ""              
  |
    [^"]                             
)*
"

问题是无效的(因为它未关闭)字符串@"""的匹配,而@""我认为,当我使用原子团又名nonbacktracking子表达式即可。 (?>""|[^"])*将匹配最后两个@"""双引号(因为左边的选项可以匹配两个双引号),然后导致总体匹配失败(因为最后一个"正则表达式不存在“),但该组似乎不会不要贪婪(虽然有贪婪的量词*和原子分组),并且在注意到正则表达式失败后仍然会回到第一个"正则表达式"后面的点。解决方法是将(?!")在正则表达式的结尾,但我想知道为什么它不适用于原子分组。


问题

原子分组不匹配最后两个引号! 匹配总是从左侧开始。 当需要回溯(由于不匹配的令牌),则默认情况下最后一个令牌弹出。 但是,当使用原子组时,整个组会弹出而不是仅显示组的最后一个标记。 这用于避免灾难性的退路

在末尾放置字符串的末尾:

@(?=")"(?>""|[^"])*"$
链接地址: http://www.djcxy.com/p/12971.html

上一篇: Regex atomic grouping not greedy enough

下一篇: Jsp tld files cannot be resolved