2013-03-07 11 views
5

私は3つの別々のソースで、目的のテキストとのマッチングが成功したことを確認した正規表現を持っています。C#Regex Pattern Conundrum

  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が含まれていることです。つまり、2行にまたがって分割されています。あなたは文字列全体を一致させたい場合は、複数行にわたって一致するoptionを設定するために、そして中\n(改行文字)を含むように.の動作を変更する必要がある「

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

すでにことをしようとしました。 Regex.Match(SampleText、@RegexPattern、RegexOptions.Multiline).Groups [1] .Value.ToString() は、空の文字列 – s15199d

+0

を返します。RegexOptions.Multiline | RegexOptions.Singlelineも同様 –

+0

ありがとうMiky! MultilineとSinglelineの両方が必要でした。 – s15199d

0

あなたはドンマッチ必要がありますRegexOptions.Multiline

あなたの場合の問題は、改行文字(\r\\n)以外の任意の文字にマッチすることです。

したがって、改行を超えてテキストを具体的に一致させるには、正規表現パターンを(?<=starttexthere)[\w\r\n]+(?=endtexthere)のように定義する必要があります。ここで

は、オンライン実行中のサンプルです:http://ideone.com/ZXgKar

+0

これはhttp://regexlib.com/RETester.aspx – s15199d

+0

@ s15199dによると一致しませんでした。はい、*一致します。また、ideoneリンクのコードが動作します。 – GolfWolf