Java 正则表达式来否定整个单词?

Java 正则表达式来否定整个单词?,java,regex,Java,Regex,我想匹配一个不包含“test”的字符串 我可以用它来做 String test1 = "This is my test string"; 它可以工作,但在大多数网站,如 ^(?。*test)。*$建议对我不起作用 根据我的理解,^(test)就足够了,那么为什么需要^(?...*test.*$呢?您需要以下内容 Pattern p = Pattern.compile(".*?^(test).*?") 正则表达式: ^(?:(?!test).)*$ 使用^(test),它只在字符串的开

我想匹配一个不包含“test”的字符串

我可以用它来做

  String test1 = "This is my test string";
它可以工作,但在大多数网站,如
^(?。*test)。*$
建议对我不起作用


根据我的理解,
^(test)
就足够了,那么为什么需要
^(?...*test.*$
呢?

您需要以下内容

 Pattern p = Pattern.compile(".*?^(test).*?")
正则表达式:

^(?:(?!test).)*$
使用
^(test)
,它只在字符串的开头查找test,而不是求反


否定
^
运算符只在字符类
[^]
内部工作,但整个单词在字符类内部不工作。例如,
[^test]
匹配除以下字符以外的任何字符:(
t
e
s
t

*
=任何零次或多次

正则表达式:

^               the beginning of the string
(?:             group, but do not capture (0 or more times)
 (?!            look ahead to see if there is not:
  test          'test'
 )              end of look-ahead
 .              any character except \n
)*              end of grouping
$               before an optional \n, and the end of the string

我误解了。现在我认为它会起作用。

为什么不干脆^(test)?@user3198603求反的
^
运算符只在字符类中起作用,例如
[^t]
将接受任何不是字母t的字符。但这并不适用于整个词。也就是说,
[^test]
将接受任何不是t、e或s的字母。在字符类之外,
^
是行开头的锚点。
\v^(%(test)@.)*$
对于Vim中的正则表达式,您认为
^
在这里意味着什么?如果(!yourString.contains(“test”),只使用
会更容易吗
顺便说一句,有249个单词包含
测试
例如,最聪明的竞赛讨厌不可测试性这接受任何包含测试的内容,而不是要求。公平地说,附录“然后翻转结果”,这将是一个非常好的答案-可能表明OP不应该使用正则表达式。
^((?!test).)*$