用于替换不在HTML标签内的内容的正则表达式

时间:2011-05-12 13:47:07

标签: php regex

我有一个功能,通过扫描某些核心关键字的博客条目,新闻和其他项目,有助于链接我网站中的网页。然后,它会用相应页面的链接替换这些关键字。

我遇到了一些问题,其中一些不应该用链接替换的单词。例如,我的一些HTML表中有一个摘要标记,其中包含表内容的小摘要。例如,我可能有一个看起来像这样的标签:

<table width="500" cellspacing="0" cellpadding="4" border="0" summary="This table contains a list of all car parts in inventory along with their corresponding prices">
...
</table>

我的功能错误地用链接替换了“汽车零件”之类的关键字或短语。我如何构造我的替换正则表达式,以便在这种情况下不替换它,但如果它出现在段落中,甚至在HTML表格的单元格中,则替换它。

提前感谢您的任何帮助和指导!

编辑:只是为了澄清,我正在使用PHP来渲染我的页面。在将内容作为HTML输出到页面之前,我正在使用str_replace()。我希望能够用ereg_replace()替换它,这样只有在满足某些条件时才会替换内容(即如上所述)。对不起,如果这引起任何混淆!

1 个答案:

答案 0 :(得分:6)

Don't use regexes to parse HTML。使用PHP DOM:

$DOM = new DOMDocument;
$DOM->loadHTML($str); // Your HTML

//get all tds
$cells = $DOM->getElementsByTagName('td');

// Do stuff to the cells

//get all paragraphs
$paragraphs = $DOM->getElementsByTagName('p');

// Do stuff to the paragraphs

// Etc...