匹配负序

时间:2012-09-30 18:39:28

标签: c# regex

我希望在word1和第一次出现的word2之间匹配文本。考虑到文本可能包含换行符,最好的方法是什么?有这样的模式:(word1)(不是word2)*(word2)?

2 个答案:

答案 0 :(得分:3)

您可以使用延迟量词来匹配word1和word2之间尽可能少的字符。

(word1).*?(word2)

请参阅MSDN上的quantifiers topic

答案 1 :(得分:1)

您可以使用SingleLine选项匹配它们:

//use '*' or '*?' depending on what you want for "word1 aaa word2 bbb word2"
string pattern = "word1(.*)word2";  
var m = Regex.Match(text1, pattern, RegexOptions.Singleline);
Console.WriteLine(m.Groups[1]);  // the result

关于SingleLine的MSDN:

  

...使正则表达式引擎将输入字符串视为一样   它由一条线组成。它通过改变行为来做到这一点   句点(。)语言元素,以便匹配每个字符,   而不是匹配除换行符之外的每个字符   \ n或\ u000A。