1. ホーム
  2. regex

[解決済み】正規表現を使ってHTMLをパースする:なぜダメなの?

2022-04-07 10:03:40

質問

stackoverflowの質問で、質問者がHTMLから何らかの情報を取得するために正規表現を使用している場合、必ずと言っていいほど、HTMLを解析するために正規表現を使用しないようにという""の回答があるように思えます。

なぜダメなのか?私は、以下のようなquote-unquote "real"HTMLパーサーがあることを知っています。 美しいスープ しかし、もしあなたが単純で、迅速で、汚いことをしているだけなら、いくつかの正規表現でうまくいくのにわざわざ複雑なものを使う必要はないでしょう?

さらに、私が理解していないだけで、正規表現が一般的な構文解析に適していない根本的な何かがあるのでしょうか?

解決するには?

HTML全体の解析は、正規表現では不可能です。なぜなら、正規表現では不可能な開始タグと終了タグのマッチングに依存するからです。

正規表現でマッチングできるのは 正規言語 が、HTMLは 文脈自由言語 ではなく は正規の言語です(@StefanPochmann が指摘したように、正規の言語も文脈自由なので、文脈自由が必ずしも正規でないことを意味するわけではありません)。HTML上の正規表現でできることはヒューリスティックだけですが、それはすべての条件に対して有効とは限りません。どんな正規表現でも間違ってマッチしてしまうようなHTMLファイルを提示することは可能なはずです。