0
<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 ?

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

4

1 回答 1

1

你可以这样做:

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

或者,您可以使用lookbehind:

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

请注意,这仅在您的属性中没有'-delimited 属性并且没有转义时才有效"

这就是为什么您应该真正考虑使用 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);
}

现在echoing$html或将其保存到文件中,将包含正确替换的 HTML。(使用 DOM 解析器非常简单。);)

于 2012-10-20T09:38:17.700 回答