ReplaceAll with regex 正在删除一个不需要的额外字符 Java

ReplaceAll with regex is removing one extra char which dont want to in Java

我有如下文字

blah blah blah test.this@gmail.com blah blah  
blah blah blah jjathis.this @gmail.com blah blah  
blah blah blah this.this.this@gmail.com blah blah this 

我想用 "that" 词替换所有 "this" 词,除了 "this" 以“.”开头。所以这里的“.this”不应该被替换,其他的都应该被替换。我写了下面的代码。

replaceAll("[^\.]"+"this", "that")  

这并没有替换 .this,但问题是它正在考虑在字符串之前多一个字符。 例如:jjathis 就像 jjthat 一样来了。但应该是jjathat。
为什么 replaceall 在开始时改变了一个额外的字符?解决方案应该是什么?
请帮忙。

也许,

(?<!\.)this

替换为

that

可能工作正常。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex = "(?<!\.)this";
        final String string = "blah blah blah test.this@gmail.com blah blah  \n"
             + "blah blah blah jjathis.this @gmail.com blah blah  \n"
             + "blah blah blah this.this.this@gmail.com blah blah this ";
        final String subst = "that";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        final String result = matcher.replaceAll(subst);

        System.out.println(result);

    }
}

输出

blah blah blah test.this@gmail.com blah blah  
blah blah blah jjathat.this @gmail.com blah blah  
blah blah blah that.this.this@gmail.com blah blah that 

如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些示例输入。