私はこれに似た文字列を持っています
<td><p>alakjsdlajsdlkj</p><p><b>asdkjalsdkjaskldj</b></p><p>asdjlaksjdlaksjd</p></td>
タグ間のすべてを取得するための正規表現は何ですか?
以下(HTMLを含む)を取得したい
<p>alakjsdlajsdlkj</p><p><b>asdkjalsdkjaskldj</b></p><p>asdjlaksjdlaksjd</p>
私はこれに似た文字列を持っています
<td><p>alakjsdlajsdlkj</p><p><b>asdkjalsdkjaskldj</b></p><p>asdjlaksjdlaksjd</p></td>
タグ間のすべてを取得するための正規表現は何ですか?
以下(HTMLを含む)を取得したい
<p>alakjsdlajsdlkj</p><p><b>asdkjalsdkjaskldj</b></p><p>asdjlaksjdlaksjd</p>
これは正規表現では実現できません。主に、それが見たものの数を追跡するメカニズムがないという点で、それらは十分に説明的/強力ではありません。要するに、これは正規表現メカニズムにスタックの概念がないためです (スタックは有限状態マシンを表し、プッシュダウン オートマトンではありません)。
たとえば、次のパターンを考えてみましょう<p>(.*)</p>
。貪欲モード (可能な限り一致) を使用し、 のような文字列がある<p>first</p><p>second</p>
場合、一致は になりますfirst</p><p>second
。非貪欲モード (最小の一致を可能にする) を使用して のような文字列を取得した<p><p>stuff</p></p>
場合は、一致した が返されます<p>stuff
。したがって、どちらのモードもすべてのケース (または任意のケース) を十分にカバーしません。
@kristopher が指摘しているように、一致内に別のタグを含めることを回避するパターンを持つことは可能ですが、これは最も内側のタグにのみ一致します。
必要なことを確実に行うには、実際のパーサーが必要です。いくつかの html 解析ソリューションが他の人によって作成されています。または、単純な解析が必要な場合は、独自のソリューションを作成できる場合があります。
HTMLパーサーを使用できず、tdと終了tdが文字列の最初と最後にある場合:
^<td>(.*)</td>$
これを試してください。最も外側のタグと一致し、グループ内の内側の文字列を返す必要があります
^<\w+>(.*)</\w+>$
ただし、正しいネストなどはチェックされません。可能であれば、適切なフレームワークを使用してください。
タグがネストされている場合、これはすぐに面倒になります。
html パーサー ライブラリを使用できませんか? そうする方がはるかに良いでしょう。
<([^>]+)>([^<]+)</\1>
山かっこで囲まれた任意の文字列に加えて、次のタグまでの任意の文字を取得します
ただし、これはネストされたタグまたは不一致のタグを処理しません
<div>test <b>nested</b></div>
< div > はそれ自身のタグの終わりに遭遇する前に < b > の開始に遭遇するため、div ではなく < b > のみをキャッチします。