2

HTMLパーサーの正規表現を作成しようとしています。

1つ以上のタグを含む特定の属性(例: <div>with )のhtmlタグを照合したい。正規表現はタグ全体(fromから)と一致する必要があります。私はいつも「メモリが使い果たされた」エラーを受け取るようです-私のプログラムはおそらく、見つけたすべてのタグを一致するものとして受け取ります。class="tab news selected"<a href><div></div>

Boost正規表現ライブラリを使用しています。

4

5 に答える 5

7

あなたはおそらくこの質問を再検討する必要があります。正規表現とHTML。要点は、正規表現を使用してHTMLを解析することは、決して理想的な解決策ではないということです。

于 2009-04-27T08:46:58.570 に答える
2

他の人が言っているように、可能な限り正規表現を使用しないでください。コードが実際にXHTMLである場合(つまり、整形式のXMLでもある場合)、aIはXercesExpat XMLパーサーの両方を推奨できます。これは、正規表現よりもはるかに優れた仕事をします。

于 2009-04-27T08:53:23.483 に答える
1

正規表現は最善の解決策ではないかもしれませんが、私はすでに5つの異なるライブラリを使用しており、<a href>タグとキーワードの検索に関してはBoostで問題ありません。

私はこれらの正規表現を使用しています:

/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/<a href>タグを見つけるためと:

/<a[^\n]*href[[^\n]*>/searched keyword/</a>/リンクを見つけるため

(ところで、それはもっとうまくいくことができますか?-私は正規表現を吸います;))

今必要なのは<a href>、'sを含むタグを見つけることです。正規表現で問題なく動作すると思います。おそらく、piotrが言ったように、独自の解析関数を作成する必要があります。

于 2009-04-27T13:08:14.730 に答える
0

flexと同じように実行します。<div>を大文字と小文字を区別しない一致と一致させ、パーサーを「div一致」状態にし、</div>まで入力の処理を続けて状態をリセットします。

これには、2つの正規表現と1つの状態変数が必要です。

SGMLタグの有効な文字は[A-Za-z_:]です。

したがって、/ <[A-Za-z _:]+>/はタグと一致します。

于 2009-04-27T10:44:35.540 に答える