5

如何让后向变得贪婪?
在这种情况下,我希望后向使用 : if is present。

m = Regex.Match("From: John", @"(?i)(?<=from:)....");
// returns ' Jon' what I expect not a problem just an example

m = Regex.Match("From: John", @"(?i)(?<=from:?)....");
// returns ': Jo'
// I want it to return ' Jon'

我找到了解决方法

@"(?i)(?<=\bsubject:?\s+).*?(?=\s*\r?$)"

只要你在后面加上一些肯定的?然后它消除了可选的贪婪。出于同样的原因,我不得不将 $ 放在前瞻中。
但是,如果您需要以可选的贪婪结束,那么必须使用下面接受的答案。

4

1 回答 1

4

有趣的是,我没有意识到他们在 .NET 中并不贪婪。这是一种解决方案:

(?<=from(:|(?!:)))

这表示:

(
  :     # match a ':'
  |
  (?!:) # otherwise match nothing (only if the next character isn't a ':')
) 

这会强制它匹配“:”(如果存在)。

于 2012-09-04T23:17:05.017 回答