只有在href属性中才有PHP preg_replace文本

时间:2012-10-20 09:36:29

标签: php regex preg-replace

<a href="http://www.example.com/foo/bar/" title="foo">
    <img src="http://www.example.com/foo/bar/" alt="foo" />
</a>

如何仅在href属性中preg_replace单词 foo

注意:页面上有多个链接。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

$str = preg_replace('/(href="[^"]*)foo/', '$1replacement', $str);

或者,您可以使用lookbehind:

$str = preg_replace('/(?<=href="[^"]*)foo/', 'replacement', $str);

请注意,只有在您的属性中没有'分隔属性且没有转义"时,此功能才有效。

这就是为什么你应该really考虑​​使用DOM解析器,而不是用正则表达式操纵HTML。

更新:以下是使用解析器的正确实现(我刚刚选择了PHP Simple HTML DOM Parser,因为它是第一个出现在Google上的人):

require "simple_html_dom.php";

$html = file_get_html($filename);
foreach($html->find('a') as $element)
{
    $element->href = preg_replace('/foo/', 'replacement', $element->href);
}

现在echo $html或将其保存到文件中,将包含正确替换的HTML。 (使用DOM解析器可以很容易。);)