<a href="http://www.example.com/foo/bar/" title="bar">Example</a>
如何仅在href属性中替换“bar”?
谢谢!
答案 0 :(得分:2)
首先我要说regular expressions are not the right tool。 (至少不要找到属性;对于替换,可能......)
但是,无论如何,这是一个正则表达式解决方案,但我无法保证它将适用于所有有效的DOM。
$newStr = preg_replace(
'/(<a\s+[^>]*href="[^"]*)bar([^"]*"[^>]*>)/',
'$1newString$2',
$str);
正则表达式的一些解释:
我从一个捕获组开始,确保我们位于href
- Tag的a
属性中。我们捕获这个的原因是,它使更换更清洁。 \s+[^>]*
允许首先使用其他属性,但不允许标记关闭。 [^"]
允许href
属性中的更多内容首先出现,而不是要关闭的属性。然后我们有bar
。然后我们在关闭属性然后关闭标记之前添加更多内容。
替换然后只使用捕获的群组$1
和$2
(其中包含bar
周围的所有内容,我们必须使用它来确保它位于正确的位置)但插入新的中间的字符串(以前是bar
)。
注意,如果您在>
- 属性之前包含href
的属性,这将特别中断!
答案 1 :(得分:0)
这样的东西可行,但您想要采取的确切方法实际上取决于您是否要对不区分大小写,对特定链接或页面中的所有链接(即全局)和目标执行此操作你的替换。
$var = preg_replace('@<a href=(["\'])(.*)/bar/["\']@', "<a href=\\1\\2/foo/\\1", '<a href="http://www.example.com/foo/bar/" title="bar">Example</a>');