1

HTML のブロックを解析し、特定の用語集に対して単語を照合するスクリプトを作成しようとしています。一致が見つかった場合は、用語をラップ<a class="tooltip"></a>して定義を提供します。

2 つの大きな欠点を除いて、問題なく動作しています。

  1. 属性にあるテキストと一致します
  2. <a>ネストされたリンクを作成して、すでにタグに含まれているテキストと一致します。

<a>正規表現を、属性にもタグにも含まれていない単語のみに一致させる方法はありますか?

関連する場合に備えて、私が使用しているコードは次のとおりです。

foreach(Glossary::map() as $term => $def) {
  $search[] = "/\b($term)\b/i";
  self::$lookup[strtoupper($term)] = $def;
}

return preg_replace_callback($search, array(&$this,'replace'),$this->content);
4

3 に答える 3

5

「正規表現でそれをしないでください。」

HTML パーサーを使用して、HTML 要素の内容を識別しながら正規表現を適用します。これにより、HTML 構造のさまざまなバリアント (有効かどうかに関係なく) を簡単に操作できるようになります。

PHP 用の堅牢で成熟した HTML パーサー

于 2009-12-08T19:29:44.763 に答える
3

個人的には、この答えが好きです。

于 2009-12-08T19:33:01.263 に答える
0

HTML 解析は興味深い研究テーマです。HTML とはどういう意味ですか? 標準 (かなりの数) があり、Web ページがあります。ほとんどの研究者は、HTML の解析に正規表現を使用していません

于 2009-12-08T19:31:05.280 に答える