正規表現を使用して XML と HTML を解析するのが難しい理由の例をいくつか挙げてもらえますか? [closed] 質問する

正規表現を使用して XML と HTML を解析するのが難しい理由の例をいくつか挙げてもらえますか? [closed] 質問する

人々が犯す間違いの一つ以上そしてもう一度正規表現を使用して XML または HTML を解析しようとしています。XML と HTML の解析が難しい理由をいくつか挙げます。

ファイルを行のシーケンスとして扱いたい人がいますが、これは有効です:

<tag
attr="5"
/>

人々は < または <tag をタグの開始として扱いたいのですが、次のようなものが実際に存在します。

<img src="imgtag.gif" alt="<img>" />

多くの場合、開始タグと終了タグを一致させたいと考えますが、XML と HTML ではタグに自分自身を含めることができます (従来の正規表現ではまったく処理できません)。

<span id="outer"><span id="inner">foo</span></span> 

多くの場合、ドキュメントの内容と照合したい場合があります (有名な「特定のページにあるすべての電話番号を見つける」問題など)。ただし、データはマークアップされている可能性があります (表示したときに正常に見えても)。

<span class="phonenum">(<span class="area code">703</span>)
<span class="prefix">348</span>-<span class="linenum">3020</span></span>

コメントには形式が適切でないタグや不完全なタグが含まれている可能性があります。

<a href="foo">foo</a>
<!-- FIXME:
    <a href="
-->
<a href="bar">bar</a>

他にどんな落とし穴があるかご存知ですか?

ベストアンサー1

ここに、楽しい有効な XML をいくつか示します。

<!DOCTYPE x [ <!ENTITY y "a]>b"> ]>
<x>
    <a b="&y;>" />
    <![CDATA[[a>b <a>b <a]]>
    <?x <a> <!-- <b> ?> c --> d
</x>

そして、この小さな喜びの束は有効な HTML です。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" [
    <!ENTITY % e "href='hello'">
    <!ENTITY e "<a %e;>">
]>
    <title>x</TITLE>
</head>
    <p id  =  a:b center>
    <span / hello </span>
    &amp<br left>
    <!---- >t<!---> < -->
    &e link </a>
</body>

無効な構造に対するブラウザ固有の解析は言うまでもありません。

正規表現を使って挑戦してみてください!

編集 (Jörg W Mittag): ここに、整形式で有効な HTML 4.01 の別の優れた例を示します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd"> 
<HTML/
  <HEAD/
    <TITLE/>/
    <P/>

おすすめ記事