正则表达式替换文本但在文本位于特定标签之间时排除 [英] Regex replace text but exclude when text is between specific tag

查看:48
本文介绍了正则表达式替换文本但在文本位于特定标签之间时排除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下字符串:

Lorem ipsum Test dolor sit amet, consetetur sadipscing elitr, sed diam nonumy <a href="http://Test.com/url">Test</a> eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd sed Test dolores et ea rebum. Stet clita kasd gubergren, no sea <a href="http://url.com">Test xyz</a> takimata sanctus est Lorem ipsum dolor sit amet.

现在我将替​​换标签之外的字符串Test"而不是标签之间的字符串(例如,替换为1234").

Now I would replace the string 'Test' outside of tags an not between tags (e.g. replaced with '1234').

Lorem ipsum 1234 dolor sit amet, consetetur sadipscing elitr, sed diam nonumy <a href="http://Test.com/url">Test</a> eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd sed 1234 dolores et ea rebum. Stet clita kasd gubergren, no sea <a href="http://url.com">Test xyz</a> takimata sanctus est Lorem ipsum dolor sit amet.

我从这个正则表达式开始:(?!<a[^>]*>)(Test)([^<])(?!</a>)

I started with this regex: (?!<a[^>]*>)(Test)([^<])(?!</a>)

但是有两个问题没有解决:

But two problems are not solved:

  1. 文本Test"也在标签内被替换(例如<a href="http://Test.com/url">)
  2. 标签之间的文本是否与搜索的文本不完全匹配,它也会被替换(例如<a href="http://url">Test xyz</a>)

我希望有人有办法解决这个问题.

I hope someone has a solution to solve this problem.

推荐答案

(?!<a[^>]*?>)(Test)(?![^<]*?</a>)

与 zb226 相同,但使用延迟匹配进行了优化

same as zb226, but optimized with a lazy match

另外,不建议在原始 HTML 上使用正则表达式.

Also, using regexes on raw HTML is not recommended.

这篇关于正则表达式替换文本但在文本位于特定标签之间时排除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆