2017-05-28 10 views
0

テキストの長さに複数の一致を見つけるときに問題が発生しました。テキスト形式は次のとおりです。Regex.Matchesが複数の一致を見つけるのに失敗する

string text = "#IDENTIFIER http://www.link1.com #IDENTIFIER http://www.link2.org #IDENTIFIER http://www.link3.com #IDENTIFIER http://www.link4.net"; 

私の目標は、このことから、各#IDENTIFIERリンク発生を抽出することであると私は、次のコード使用して、それをしています:

string pat = @"(#IDENTIFIER)(.*)\.(com|org|net)"; 
MatchCollection matches = Regex.Matches(text, pat); 
foreach(Match match in matches) { 
    Console.WriteLine("'{0}' found at index {1}.", match.Value, match.Index); 
} 

問題があるが、それを1つの一致を返します。4.なぜ中間のパターンは無視されますか?

私は行方不明を知っていますか?

+0

すばらしい、ありがとう! – dspfnder

+0

'RegexOptions.RightToLeft'を試してみてください。これは、通常、接頭辞を繰り返し処理するときに機能します。 –

+0

@Lloydは正しいですが、マルチライン問題の場合は、mフラグを使用します。https://msdn.microsoft.com/en-US/library/yd1hzczs(v=vs.110).aspx – jojomojo

答えて

1

.*は一般的に貪欲であるからです。代わりに.*?を試してください:

string pat = @"(#IDENTIFIER)(.*?)\.(com|org|net)"; 
+0

。ありがとう! – dspfnder

+1

説明:https://stackoverflow.com/a/3075150/3883866を参照してください。 –

関連する問題