我认为这是一个非常常见的问题,但也无法在SO或任何其他教程中找到相关问题。因此,如果它是重复的,请随意标记。
这就是问题所在,我有String
,我想将其中的所有字词test
替换为tested
。但我不想替换<>
例如:字符串this test is <other test end>
应替换为this tested is <other test end>
。
所以我创建了一个正则表达式(?:<.*?>)|(test)
(<>
内的任何内容都应该是非捕获组,所有其他test
应该匹配。
但据我所知,Matcher.group(0)
甚至会匹配非捕获组。更糟糕的是Matcher.replaceAll()
似乎也取代了非捕获组文本?
我该如何解决这个问题?我有什么方法可以指定replaceAll()
来仅替换group(1)
元素吗?
还有其他简单而干净的方法来解决这个问题吗?
答案 0 :(得分:5)
使用否定先行断言。
string.replaceAll("test(?![^<>]*>)", "tested")
<强>解释强>
test
- 仅在字符串测试未后跟
任何字符,但不是<
或>
,不论是零还是多次。
接着是>
char。因此,这与test
<>
之外的所有$ telnet <hostname> <port>
相匹配