首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果模式的第一次出现与某个条件不匹配,如何使匹配失败?

如果模式的第一次出现与某个条件不匹配,如何使匹配失败?
EN

Stack Overflow用户
提问于 2018-10-28 20:38:30
回答 2查看 77关注 0票数 3

我有一个逗号分隔的key=value对字符串,如下所示:

代码语言:javascript
运行
复制
foo=1,foo=1,bar=2

在这个字符串中,我希望捕获第一个foo的值,但前提是它紧跟在bar=2之后。

示例:

  • 在这个字符串中,应该捕获值1: baz=0,foo=1,bar=2,foo=3,bar=4
  • 在这个字符串中,不应该捕获任何内容: baz=0,foo=1,foo=1,bar=2

我的当前解决方案使用了一个经过调整的贪婪令牌,但这迫使我复制正则表达式的foo=[^,]*,部分:

代码语言:javascript
运行
复制
^(?:(?!foo=[^,]*,).)*foo=([^,]*),bar=2(?:,|$)

有没有办法做到这一点,而不必重复这么大一部分的正则表达式?

EN

Stack Overflow用户

回答已采纳

发布于 2018-10-28 21:14:19

回溯控制动词很容易

代码语言:javascript
运行
复制
(?<![^,])foo=([^,]*)(*COMMIT),bar=2(?![^,])

我们匹配一个没有逗号字符的位置(即字符串的开始或紧跟在,之后),然后是foo=,后面是0或更多的非逗号字符(我们捕获这些字符)。这是foo=...部分。

然后,我们提交找到的第一个匹配,并要求一个,bar=2匹配,而不是一个非逗号字符(即,或字符串的末尾)。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53035860

复制
相关文章

相似问题

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