1

我正在尝试编写一个脚本来解析 HTML 块并将单词与给定的术语表进行匹配。如果找到匹配项,它会将术语包装进去<a class="tooltip"></a>并提供定义。

它工作正常——除了两个主要缺点:

  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 是什么意思?有标准(很多),还有网页。大多数研究人员不使用正则表达式来解析 HTML

于 2009-12-08T19:31:05.280 回答