我正在尝试编写一个脚本来解析HTML块并根据给定的术语表匹配单词。如果找到匹配项,则会将该术语包含在<a class="tooltip"></a>
中并提供定义。
它工作正常 - 除了两个主要缺点:
<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);
答案 0 :(得分:5)
“不要用正则表达式来做。”
使用HTML解析器,然后在识别HTML元素时将正则表达式应用于HTML元素的内容。这将允许您轻松地操作许多不同的HTML结构变体,无论是有效还是其他,没有很多残缺和难以维护的正则表达式。
答案 1 :(得分:3)
就个人而言,我更喜欢this answer。
答案 2 :(得分:0)
HTML解析是一个有趣的研究课题。你对HTML有什么意思?有标准(很多),还有网页。大多数研究人员不使用正则表达式来解析HTML