如何替换链接中的文本,但跳过链接中已有的文本?

时间:2011-11-25 07:08:34

标签: php regex preg-replace preg-match

如何替换链接中的特定文本,但跳过链接中已有的文本?

示例:

<a href="helloworld.com">Lorem ipsum dolor sit amet</a>, consectetur
adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
magna aliqua. Lorem ipsum dolor sit amet, consectetur <a
href="adipisicing.com">adipisicing</a> elit, sed do eiusmod tempor
incididunt ut labore et dolore <a href="helloworld.com">magna aliqua.
Lorem ipsum</a> dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.

如您所见,我需要在第二个语句中将“Lorem ipsum”替换为<a href="somewhere.com">Lorem ipsum</a>,但跳过已在链接中的“Lorem ipsum”

谢谢!

1 个答案:

答案 0 :(得分:4)

正则表达式不太适合处理HTML。您拥有的每个解决方案都会在评论,嵌入式JavaScript或格式错误的HTML上失败。

也就是说,如果您严格控制文档的结构,可以尝试使用正则表达式方法。要匹配不在a标记内的每个“Lorem ipsum”,我会使用

Lorem ipsum(?=([^<]*($|<a |<[^/]|</[^a]))*($|(?<=a )))

此语句使用look ahead assertion匹配“Lorem ipsum”,如果在下一个结束之前后跟一个开始a标记,或者不再跟随标记。请参阅RegExr中的实际操作。

如您所见,使用HTML解析器可能更好。 =)