我正在尝试编写一个脚本来解析一个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);
Run Code Online (Sandbox Code Playgroud)
"不要用正则表达式做到这一点."
使用HTML解析器,然后在识别它们时将正则表达式应用于HTML元素的内容.这将允许您轻松地操作许多不同的HTML结构变体,有效和其他,没有很多残酷和难以维护的正则表达式.