Java 在特定单词中匹配除两个以外的任意单词

Java 在特定单词中匹配除两个以外的任意单词,java,regex,Java,Regex,我正在尝试创建一个常规表达式,以匹配除true或false之外的任何单词(\w+) 到目前为止,我得到的是:\w+\s*=\s*[^true.^false]\w+ class Ntnf { public static void main ( String ... args ) { System.out.println( args[0].matches("\\w+\\s*=\\s*[^true|^false]\\w+") ); } } 但不是为了: a = b a = true a

我正在尝试创建一个常规表达式,以匹配除true或false之外的任何单词(
\w+

到目前为止,我得到的是:
\w+\s*=\s*[^true.^false]\w+

class Ntnf { 
 public static void main ( String ... args ) { 
  System.out.println( args[0].matches("\\w+\\s*=\\s*[^true|^false]\\w+") );
 }
}
但不是为了:

a = b
a = true
a = false
它总是相配的

如何匹配除true或false之外的任何单词(
\w+

编辑

我试图找出这种模式:

a = b
x = y
name = someothername
etc = xyz
x = truea
n = falsea
但要避免匹配

a = true
etc = false
name = true
[^true]
是一个。它只匹配一个字符
[^true]
表示:“仅当此字符不是
t
r
u
e
中的一个时,才匹配此字符。”。这不是你需要的,对吗

对于这个任务来说,正则表达式不是一个好主意。在正则表达式中执行它将非常复杂。只需使用字符串比较。

您可以使用:

^(?!(true|false)$)
  • ^-字符串的开头
  • ?!-消极前瞻
  • $-字符串结尾
所以只要整个字符串不只是“真”或“假”,它就匹配。请注意,它仍然可以从其中一个开始

但是,使用常规字符串比较可能更简单

编辑:

针对您的情况的整个正则表达式(无需转义)是:

^\w+\s*=\s*(?!(true|false)$)\w+$

这是相同的想法,只是我们把它放在等式形式中。

方括号匹配可能的字符列表,或者拒绝可能的字符列表(不一定按照您指定的顺序),因此[^true]不是正确的方法

当我试图不匹配某个单词时,我通常会执行以下操作:
([^t]| t[^r]| tr[^u]| tru[^e])

这不是我想的那样。谢谢你的评论。让我们等待答案+1@OscarRyz下面是一个关于长相头的解释:“这是真的”这个短语应该匹配吗?需求不清楚是否应该这样做,这将给这个解决方案带来重大问题。“这是真的”不应该这样做!我知道有一个regexp解决方案。谢谢你也许你可以把它分成两种模式,一种是mataches WORD=WORD,另一种是matches WORD=true | false,然后
如果(MATCH1&&!MATCH2)
看起来这就是我最后要做的事情……:(…您的语法错误;
[^blah]
是一个否定字符类。它匹配的单个字符不是
b
l
a
h