どうすれば正規表現で以下を抽出できますか?
String string = "<h1>1st header</h1>" + "<h2>second header</h2>" +
"<p>some text</p>" + "<hr />";
Pattern p = Pattern.compile("</h1>(\\S+)<hr />", Pattern.MULTILINE);
出力は空ですが、なぜですか?
</h1>
との間の文字に<hr />
はスペースが含まれているため、出力は空です。スペース\S+
に遭遇するとすぐに失敗します。
たとえば、に置き換える\\S+
と、非常に具体的なサンプル文字列.+
のすべてをキャッチする必要があります。ただし、これを「正しく」実行し、例に完全に適合しない任意のHTMLに一致させることができるようにする場合は、HTMLAgilityPackなどのHTMLパーサーを使用してください。パーサーベースのバージョンは簡単で正確であり、正気や宇宙を危険にさらすことはありません。
正規表現\S+は、「一部のテキスト」間のスペースと一致しません。また、正気度を重視する場合は、正規表現を使用してHTMLを解析しないでください。