2013-03-07 85 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