ページ内のコンテンツの検索に関する質問を探していましたが、多くの回答DOM
では、REGEX
. なぜそうなのですか?それは処理時間か何かを改善しますか。
3 に答える
DOM パーサーが実際にページを解析しています。
正規表現は、HTML のセマンティックな意味を理解せずに、テキストを検索しています。
HTML が通常の言語ではないことは証明できます。したがって、HTML ドキュメントから任意の要素パターンのすべてのインスタンスを解析する正規表現を、その要素パターンのインスタンスではないテキストと照合せずに作成することは不可能です。
特定のユースケースで機能する正規表現を設計できる場合がありますが、提供される HTML を正確に予測すること (したがって、限られたユースケースの正規表現がどのように壊れるか) は非常に困難です。
さらに、正規表現は XPath 式よりもページのコンテンツの変更に適応するのが難しく、XPath は (私の考えでは) 読みやすいです。
そのため、ジョブに不適切なツール (構造化ドキュメント用のテキスト解析ツール) を使用する代わりに、ジョブに適したツール (HTML を解析するための HTML パーサー) を使用します。
「HTMLは正規の言語ではない…」という言葉はもう聞こえません。正規表現 (今日の言語で使用されているもの) も正規表現ではありません。
簡単な答えは次のとおりです。
正規表現はパーサーではなく、パターンを記述し、そのパターンに一致しますが、ドキュメント構造についてはわかりません。1 つの正規表現では何も解析できません。もちろん、正規表現はパーサーの一部になる可能性がありますが、わかりませんが、ほぼすべてのパーサーが内部で正規表現を使用して特定のサブパターンを見つけると思います。
HTML内で見つけたいもののためにそのパターンを構築できる場合は、それを使用してください。しかし、多くの場合、このパターンを作成することはできません。これは、実際にはすべてのコーナー ケースをカバーすることができないか、すべてのリンクを検索するなどの依存関係が緑でピンク色でない場合に限られるためです。
ほとんどの場合、ドキュメントの構造を理解し、多くの「壊れた」HTML も受け入れるパーサーを使用する方がはるかに簡単です。すべてのリンク、または特定のテーブルのすべてのテーブル要素に簡単にアクセスできます。
私の考えでは、コンテンツを制御できないページでは REGEXP を使用する方が安全です。HTML が適切に形成されていない可能性があり、DOM パーサーが失敗する可能性があります。
編集:
まあ、私が読んだことを考えると、ドキュメントのすべてのリンクを取得するなど、非常に小さなことが必要な場合にのみ、おそらく正規表現を使用する必要があります。