正则表达式:如何捕获可能包含子字符串的模式而不捕获相同子串的后续出现

时间:2013-01-09 18:32:20

标签: regex

以下文字:

start - before capture text - tocapture - maybe after capture

我必须可靠地捕获值“text - tocapture”,而不是拖动可选的- maybe after capture部分。

  • text - tocapture中的空格 - 空格模式可能存在也可能不存在。 text - tocapture也可以是一个单词或有空格。
  • 如果存在- maybe after capture,它将始终以space-dash-space开头,然后是随机文本。

无论text - tocapture是否存在,我都需要- maybe after capture完全匹配。

我提出的最好的是:

^start - before capture (.*)( - .*)?$

问题是,它捕获了“text-tocapture”之后的所有内容,大概是因为它还包含“ - ”。我尝试了一些负面的前瞻性东西,但没有运气。请参阅下面的Rubular输出。

First Attempt

Second Attempt

2 个答案:

答案 0 :(得分:0)

这是正常的:.*捕获所有内容,第二部分是可选的。

因此,您的.*会抓取text - tocapture - maybe after capture并为第二组留下任何内容。由于量词?使其成为可选项,因此对于空字符串非常满意......

为了可靠地捕获您想要的内容,您可以使用:

^start - before capture ([^-]+-[^-\s]+).*

答案 1 :(得分:0)

如果我理解你的需要,我认为应该这样做:

^start - before capture (.*? - .*?)( - .*)?$

其中$1应该捕获您需要的内容。在您的示例中,它捕获:

1.  text - tocapture
2.  - maybe after capture