Java 在特定单词中匹配除两个以外的任意单词
我正在尝试创建一个常规表达式,以匹配除true或false之外的任何单词(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
\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
。