需要RegEx大师

时间:2009-12-08 19:23:10

标签: regex glossary

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

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

  1. 它匹配属性
  2. 中的文本
  3. 它匹配<a>标记中已有的文本,创建了嵌套链接。
  4. 有没有办法让我的正则表达式只匹配不在属性中的单词而不在<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);
    

3 个答案:

答案 0 :(得分:5)

“不要用正则表达式来做。”

使用HTML解析器,然后在识别HTML元素时将正则表达式应用于HTML元素的内容。这将允许您轻松地操作许多不同的HTML结构变体,无论是有效还是其他,没有很多残缺和难以维护的正则表达式。

Robust and Mature HTML Parser for PHP

答案 1 :(得分:3)

就个人而言,我更喜欢this answer

答案 2 :(得分:0)

HTML解析是一个有趣的研究课题。你对HTML有什么意思?有标准(很多),还有网页。大多数研究人员不使用正则表达式来解析HTML