特定のページがヘッダータグ(h1、h2など)の順序を尊重していないかどうかを判断しようとしています。実際のところ、私はたくさんのページを解析できるようにしたいので、ヘッダーの順序に従わない各ページを返します。
私の最初の目標は、anの直後にh2以外のものが続くかどうかを確認できるようにすることでした。次のパターンで達成しました
(?<=<h1[^<>]*>.+?)(?<!<h1[^<>]*>.+?<h2[^<>]*>.+?)<h[3-6][^<>]*>
以前の正規表現は私にとってはうまく機能していますが、実際には効率的ではなく、完璧にはほど遠いです。
ですから、そもそもこのパターンを改善する手助けをしたいと思います。可能であれば、私の古いパターンとそれがなぜそれほど非効率的であるかを比較する説明をしたいと思います。次に、パターンをアップグレード/変更して、ドキュメントヘッダータグの順序が尊重されるようにするという元の目標を達成したいと思います。
注: ベンチマークにRegexHeroを使用しています
正規表現は通常、HTMLを解析するためのベストプラクティスではないことは知っていますが、これは、ルックアラウンドやアトミックグループ化などをより効率的に使用するための演習です。ご理解のほどよろしくお願いいたします。
次のパターンと次のテキストをサンプルとして使用できます
パターン:
(?<=lol1.+?)(?<!lol1.+?lol2.+?)lol[3-6]
文章:
lol1 bla lol3 bla lol2 bla lol4