式で最初の一致だけをキャプチャしたい
<p>.*?</p>
私は試し<p>.*?</p>{1}
ましたが、動作していません.htmlドキュメントにあるすべてのpタグを返します.助けてください.
式で最初の一致だけをキャプチャしたい
<p>.*?</p>
私は試し<p>.*?</p>{1}
ましたが、動作していません.htmlドキュメントにあるすべてのpタグを返します.助けてください.
正規表現を指定して文字列内のすべての一致を返すメソッドを使用しているようです。その場合、すべての一致を返すのではなく、最初の一致のみを返すように、正規表現を文字列の先頭に固定する必要があります。
^.*?<p>.*?</p>
括弧を使用して、キャプチャしたいものをキャプチャします。
PS: ここでは、「正規表現を使用して HTML を解析するのを避け、適切な HTML パーサーを使用する」という標準的なアドバイスを示します。この単純な正規表現は、ネストされたセクションでは失敗<p>
します (HTML で有効かどうかは覚えていませんが、そうでない場合でも取得できる可能性があります)。
Regex.Match
メソッドはデフォルトでこれを行い、正規表現は正しいです。
Regex regex = new Regex("<p>(.*?)</p>");
Match match = regex.Match("<p>1</p><p>2</p>");
Console.WriteLine("{0}", match.Value);
このプログラムを実行すると、1
.