2013-03-07 90 views
5

我有一个正则表达式,我已经在3个独立的源中验证成功匹配所需的文本。C#正则表达式模式难题

  1. http://regexlib.com/RETester.aspx
  2. http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx
  3. http://sourceforge.net/projects/regextester/

但是,当我用我的代码中的正则表达式。它不会产生匹配。我用这个代码使用了其他正则表达式,并且它们导致了所需的匹配。我不知所措......

string SampleText = "starttexthere\r\nothertexthereendtexthere"; 
string RegexPattern = "(?<=starttexthere)(.*?)(?=endtexthere)"; 
Regex FindRegex = new Regex(@RegexPattern); 
Match m = FindRegex.Match(SampleText); 

我不知道这个问题是我的正则表达式,或者我的代码。

回答

7

问题是您的文本包含\r\n这意味着它分为两行。如果你想整个字符串匹配你必须设置option跨多行匹配,并且在改变.的行为,包括\n(换行字符)匹配

Regex FindRegex = new Regex(@RegexPattern, RegexOptions.Multiline | RegexOptions.Singleline); 
+0

试过了。 Regex.Match(SampleText,@RegexPattern,RegexOptions.Multiline).Groups [1] .Value.ToString() 返回空字符串 – s15199d 2013-03-07 16:07:47

+0

如果包含RegexOptions.Multiline | RegexOptions.Singleline以及 – 2013-03-07 16:13:05

+0

谢谢Miky!它需要Multiline和Singleline。 – s15199d 2013-03-07 16:19:04

0

你不” t需要RegexOptions.Multiline

你的情况的问题是点符合除换行符(\r\\n)之外的任何字符。

因此,您需要定义您的正则表达式模式,如下所示:(?<=starttexthere)[\w\r\n]+(?=endtexthere)为了跨越换行符特别匹配文本。

这里是一个在线运行的样本:http://ideone.com/ZXgKar

+0

这不符合http://regexlib.com/RETester.aspx – s15199d 2013-03-07 16:10:35

+0

@ s15199d是的,它*确实*匹配。此外,ideone链接中的代码正常工作。 – GolfWolf 2013-03-07 16:37:09