当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
答案 0 :(得分:9)
Beacuase [two]
匹配字符串"[one]"
答案 1 :(得分:6)
System.out.println("[one]".matches("(?i).*[two].*"));
打印true
,因为character class o
的{{1}}与[two]
中的o
相匹配。以下one
匹配.*
- Voilà,成功匹配!
在正则表达式中,ne
表示“其中一个字符[abc]
,a
或b
”。
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\]