5

3 つの別々のソースで、目的のテキストに正常に一致することを確認した正規表現があります。

  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);

問題が正規表現なのかコードなのかわかりません。

4

2 に答える 2

7

問題は、テキストに aが含まれていることです。これは、テキストが\r\n2 行に分割されていることを意味します。文字列全体に一致させたい場合は、オプションを複数行にまたがって一致するように設定し、 (改行文字) を一致.に含めるようにの動作を変更する必要があります。\n

 Regex FindRegex = new Regex(@RegexPattern, RegexOptions.Multiline | RegexOptions.Singleline);
于 2013-03-07T15:55:25.497 に答える
0

必要ありませんRegexOptions.Multiline

あなたの場合の問題は、ドットが改行文字 (\r\および\n) 以外の任意の文字に一致することです。

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

オンラインの実行サンプルは次のとおりです: http://ideone.com/ZXgKar

于 2013-03-07T16:03:02.127 に答える