首页 > 解决方案 > 为什么我的正则表达式将一个角色放在与我预期不同的捕获组中?

问题描述

我有给定的字符串:

bar"{foo}"bar
bar{foo}bar

我试图让第一个和第三个捕获组都是公正bar的。{foo}对于每个匹配项,第二个捕获组应分别带有引号和不带引号。

我有以下正则表达式:

(^.*)("?\{.*\}"?)(.*$)

有了这些结果:

Match 1
Full match.  bar"{foo}"bar
Group 1.     bar"
Group 2.     {foo}"
Group 3.     bar

Match 2
Full match.  bar{foo}bar
Group 1.     bar
Group 2.     {foo}
Group 3.     bar

为什么"角色不在第二组中?如果我在第二组中特别提到它,我不明白为什么它会在第一组中。我是否需要告诉第一组忽略它或将其用作右边界?

标签: regex-group

解决方案


当我写完这个问题时,我意识到我遇到的问题。我需要使用一个不情愿的量词,这样第一组就不会"在下一组有机会之前抢到。

这是一个小的修正 - 我添加了.*?(不情愿)而不是.*(贪婪):

(^.*?)("?\{.*\}"?)(.*$)

很好的解释:贪婪 vs. 不情愿 vs. 占有量词


推荐阅读