<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 ?
注意:页面上有多个链接。
<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 ?
注意:页面上有多个链接。
你可以这样做:
$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);
}
现在echo
ing$html
或将其保存到文件中,将包含正确替换的 HTML。(使用 DOM 解析器非常简单。);)