[解決済み】正規表現を使ってHTMLをパースする:なぜダメなの?
2022-04-07 10:03:40
質問
stackoverflowの質問で、質問者がHTMLから何らかの情報を取得するために正規表現を使用している場合、必ずと言っていいほど、HTMLを解析するために正規表現を使用しないようにという""の回答があるように思えます。
なぜダメなのか?私は、以下のようなquote-unquote "real"HTMLパーサーがあることを知っています。 美しいスープ しかし、もしあなたが単純で、迅速で、汚いことをしているだけなら、いくつかの正規表現でうまくいくのにわざわざ複雑なものを使う必要はないでしょう?
さらに、私が理解していないだけで、正規表現が一般的な構文解析に適していない根本的な何かがあるのでしょうか?
解決するには?
HTML全体の解析は、正規表現では不可能です。なぜなら、正規表現では不可能な開始タグと終了タグのマッチングに依存するからです。
正規表現でマッチングできるのは 正規言語 が、HTMLは 文脈自由言語 と ではなく は正規の言語です(@StefanPochmann が指摘したように、正規の言語も文脈自由なので、文脈自由が必ずしも正規でないことを意味するわけではありません)。HTML上の正規表現でできることはヒューリスティックだけですが、それはすべての条件に対して有効とは限りません。どんな正規表現でも間違ってマッチしてしまうようなHTMLファイルを提示することは可能なはずです。
関連
-
[解決済み] アポストロフィの正規表現
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] シェルスクリプトで正規表現を使用するにはどうすればよいですか?
-
[解決済み] 郵便番号の正規表現
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] 正規表現における非捕捉グループとは何ですか?
-
[解決済み] grepによるネガティブマッチング(fooを含まない行にマッチする)
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] 正規表現における「lazy」「greedy」の意味とは?
-
[解決済み] jQueryセレクタの正規表現
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】regex オプションのワードマッチ
-
[解決済み】正規表現でのコロン記号の使用について
-
[解決済み】Vimで正規表現に置換すると、`E488: Trailing characters`が発生します。
-
[解決済み] 文字列の完全一致のための正規表現
-
[解決済み] 標準的な10桁の電話番号にマッチする正規表現
-
[解決済み] Regex空の文字列または電子メール
-
[解決済み] Githubの「ブランチ名パターン」の否定
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] 正規表現でXMLやHTMLを解析するのが難しい理由を、いくつか例を挙げて教えてください。[クローズド]です。
-
[解決済み】正規表現でネストしたパターンにマッチさせることは可能か?重複