正则表达式匹配不含有指定关键词的链接

  这两天遇到一个正则的难题,历经磨难,终于解决了,记录在此,以备查用。

  由于网站系统的文章内容需要将特定关键字替换成链接,为了避免将本身已经处于链接中的关键字也替换成链接而出错,需要在替换前先判断一下。由于一时无法写出直接查找不处于链接中的关键字的正则表达式,我就反其道而行之,先查找处于链接中的关键字,然后将整个匹配到的链接替换成一个临时字符串,然后再去进行替换关键字为链接的动作,完了后再将临时字符串替换回原来的链接字符串。

  首先想到的正则表达式是:(<a[^>]+?>(.+?)(关键字)(.+?)</a>),测试发现如果前面有链接存在,也会一并获取过来。修正一下,把标签给排除在外:(<a[^>]+?>([^<]+?)(关键字)([^<]+?)</a>),好像是可以了。可是突然间发现忽略了个链接中有非链接标签的情况存在,如果是这样,就获取不到了,再次修正,只排除链接标签:

(<a[^>]+?>((<(?!a)|[^<])+?)(关键字)(.+?)</a>)

这下终于测试通过了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注