开发者

Why does the Java regex ".*[two].*" match "[one]"?

Why does String.matches return true when two values are in [] brackets?

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


Beacuase [two] matches one of the letters t, w or o which is in the string "[one]"


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

prints true because the o of the character class [two] matches the o in one. The following .* matches ne - Voilà, successful match!

In a regular expression, [abc] means "one of the characters a, b or c".

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

will print false because now the brackets are treated literally. Not that this regex makes a lot of sense, though.


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

The rectangular brackets have to be quoted.

Try "[one]".matches("(?i).*" + Pattern.quote("[two]") + ".*") instead.


[two] matches one of the letters in the square brackets, i.e. 't', 'w', and 'o'
To match the square brackets also, you need to escape it like \[two\]

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜