首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式原子分组不够贪婪

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

Stack Overflow用户
提问于 2012-08-31 21:50:10
回答 1查看 163关注 0票数 0

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

代码语言:javascript
复制
@(?=")"   #at sign if followed by double quote then double quote          
(?>       #atomic
    ""              
  |
    [^"]                             
)*
"

问题是无效的(因为它不是封闭的)字符串@"""匹配为@""。我认为当我使用原子分组,也就是非回溯子表达式时,(?>""|[^"])*将匹配@"""的最后两个双引号(因为左边的替代方案可以匹配两个双引号),然后导致总体匹配失败(因为正则表达式的最后一个"不存在),但是组似乎还不够贪婪(尽管有贪婪的量词*和原子分组),并且只要注意到正则表达式失败,它仍然会回溯到正则表达式的第一个"之后。一种解决方法是将(?!")放在正则表达式的末尾,但我想知道为什么它不能与原子分组一起工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-31 22:13:15

问题

最后两个引号不匹配!匹配始终从左侧开始。当需要回溯时(因为令牌不匹配),那么最后一个令牌会默认弹回。但是,当使用原子组时,整个组都会弹出,而不仅仅是组的最后一个令牌。这是用来避免。

解决方案

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

代码语言:javascript
复制
@(?=")"(?>""|[^"])*"$
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12216735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档