匹配任何单词,但两个具体

时间:2011-04-06 18:00:47

标签: java regex

我正在尝试创建一个常规表达式来匹配任何单词(\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

3 个答案:

答案 0 :(得分:1)

[^true]character class。它只匹配一个字符[^true]表示:“仅当此字符不属于true时才匹配。这不是你需要的,对吗?

正则表达式不是一个好主意。在正则表达式中执行它会非常复杂。只需使用字符串比较。

答案 1 :(得分:1)

您可以使用:

^(?!(true|false)$)
  • ^ - 字符串的开头
  • ? - 否定前瞻
  • $ - 字符串结尾

只要整个字符串不仅仅是“true”或“false”,它就会匹配。请注意,它仍然可以从其中一个开始。

但是,使用常规字符串比较可能更直接。

编辑:

对于你的情况,整个正则表达式(没有逃避)是:

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

这是一样的想法,除了我们把它放在等式中。

答案 2 :(得分:0)

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

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