我正在尝试创建一个常规表达式来匹配任何单词(\w+
),除了true或false。
到目前为止,这是:\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
答案 0 :(得分:1)
[^true]
是character class。它只匹配一个字符。 [^true]
表示:“仅当此字符不属于t
,r
,u
或e
时才匹配。这不是你需要的,对吗?
正则表达式不是一个好主意。在正则表达式中执行它会非常复杂。只需使用字符串比较。
答案 1 :(得分:1)
您可以使用:
^(?!(true|false)$)
只要整个字符串不仅仅是“true”或“false”,它就会匹配。请注意,它仍然可以从其中一个开始。
但是,使用常规字符串比较可能更直接。
编辑:
对于你的情况,整个正则表达式(没有逃避)是:
^\w+\s*=\s*(?!(true|false)$)\w+$
这是一样的想法,除了我们把它放在等式中。
答案 2 :(得分:0)
方括号匹配可能的字符列表,或拒绝可能的字符列表(不一定按照您指定的顺序),因此[^ true]不是可行的方法。
当我试图不匹配某个单词时,我通常会执行以下操作:
([^t]|t[^r]|tr[^u]|tru[^e])