1

特定のページがヘッダータグ(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

4

1 に答える 1

0

できることは、ヘッダーシーケンスを配列に抽出し、それを操作できるようにすることです。例えば:

<h1><h3></h3></h1><h2><h3><h4></h4></h3></h2>

次のように翻訳されます:

[1,3,-3,-1,2,3,4,-4,-3,-2]

次に、簡単な操作を使用して構造を検証できます(たとえば、ある値から次の値へのジャンプは+/- 1です)。

正規表現:

/(<h\d|<\/h\d)/g
于 2013-02-13T17:00:13.553 に答える