0

在以下文本行中:

start - before capture text - tocapture - maybe after capture

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

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

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

我想出的最好的是:

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

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

第一次尝试

第二次尝试

4

2 回答 2

0

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

因此,您的.*意志会为第二组捕获text - tocapture - maybe after capture并留下任何东西。由于量词?使它成为可选的,它对空字符串非常满意......

为了可靠地捕获你想要的东西,你可以使用这个:

^start - before capture ([^-]+-[^-\s]+).*
于 2013-01-09T18:34:18.037 回答
0

如果我正确理解您的需求,我认为应该这样做:

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

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

1.  text - tocapture
2.  - maybe after capture
于 2013-01-09T18:38:27.110 回答