Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于替换不在HTML标记内的内容的正则表达式_Php_Regex - Fatal编程技术网

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

Php 用于替换不在HTML标记内的内容的正则表达式,php,regex,Php,Regex,我有一个功能,可以通过扫描博客条目、新闻和其他某些核心关键字来帮助链接网站内的页面。然后,它将这些关键字替换为指向相应页面的链接 我遇到了一个问题,一些不应该用链接替换的单词被删除了。例如,我在一些HTML表中有一个summary标记,其中包含表内容的一个小摘要。例如,我可能有一个如下所示的标记: <table width="500" cellspacing="0" cellpadding="4" border="0" summary="This table contains a list

我有一个功能,可以通过扫描博客条目、新闻和其他某些核心关键字来帮助链接网站内的页面。然后,它将这些关键字替换为指向相应页面的链接

我遇到了一个问题,一些不应该用链接替换的单词被删除了。例如,我在一些HTML表中有一个summary标记,其中包含表内容的一个小摘要。例如,我可能有一个如下所示的标记:

<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()替换它,这样我就可以仅在内容满足某些条件时(如上文所述)替换内容。抱歉,如果这造成任何混乱

。使用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...

您当前的正则表达式模式是什么?似乎普遍认为不应该将正则表达式与复杂的HTML规则结合使用。您是否考虑过使用XML解析器来识别要在其上运行替换的部分?对不起,我应该澄清一下,我将添加一条编辑语句。我正在使用PHP呈现页面输出。我会在PHp ereg_replace()中使用正则表达式,而不是使用str_replace()。如何处理奇数情况?例如,我想用链接替换单词car,但car是另一个句子的一部分,整个句子包含链接。我不想在那个特定的情况下链接它,我怎样才能抓住它,使它足够聪明地忽略那个情况呢?这里有一个解决方案:
while($parentNode=$node->parentNode){/*检查$parentNode是否为锚定,如果是*/}
或者,您可以创建XPath查询来查找没有锚定的单元格/段落。有关更多信息,请参阅。