为什么Java正则表达式“。* [two]。*”匹配“[one]”?

时间:2011-09-15 13:27:10

标签: java regex string

String.matches括号中有两个值时,为什么true会返回[]

System.out.println("[one]".matches("(?i).*" + "[two]" + ".*"));
   //Why does it return true? Shouldn't "[]" be treated as value?
System.out.println("one".matches("(?i).*" + "two" + ".*"));//OK - prints false

System.out.println("[one]".equals("[two]"));//OK - prints false
System.out.println("one".equals("two"));//OK - prints false

4 个答案:

答案 0 :(得分:9)

Beacuase [two]匹配字符串"[one]"

中的一个字母t,w或o

答案 1 :(得分:6)

System.out.println("[one]".matches("(?i).*[two].*"));

打印true,因为character class o的{​​{1}}与[two]中的o相匹配。以下one匹配.* - Voilà,成功匹配!

在正则表达式中,ne表示“其中一个字符[abc]ab”。

c

将打印System.out.println("[one]".matches("(?i).*\\[two].*")); 因为现在括号被字面处理。但并不是说这个正则表达式很有意义。

答案 2 :(得分:1)

Regex:  .*     [two]     .*
Match:  "["     "o"    "ne]"

必须引用矩形括号。

请尝试"[one]".matches("(?i).*" + Pattern.quote("[two]") + ".*")

答案 3 :(得分:1)

[two]匹配方括号中的一个字母,即't', 'w', and 'o'
要同样匹配方括号,您需要像\[two\]

一样转义它