我使用Pattern.matches()
方法有不受欢迎的行为。
我希望我的正则表达式不会检测到换行符。
下一个代码返回true,但我不知道原因:
String text = "\n";
if(Pattern.matches("\\t|\\s",text)){
System.out.println("True");
}
else{
System.out.println("False");
}
我应该在正则表达式中更改什么才能返回false?
答案 0 :(得分:2)
\\s
包括所有空格,而空白又包含新行。
请参阅docs:
\ s一个空格字符:[\ t \ n \ x0B \ f \ r \ n]
由于您使用单字符matches
调用String
,因此条件将返回true
。
如果你只想匹配"%20"在空格中,您可以使用条件中的实际空格而不是\\s
:
if(Pattern.matches("\\t| ",text)){
答案 1 :(得分:1)
根据Pattern API,\s
代表a whitespace character: [ \t\n\x0B\f\r]
。因此,它将匹配其中任何一个。
您可以列出要匹配的每个字符,也可以使用|
(任一)和!
等操作符(不是)。如果您逐行浏览文本,则还可以使用^
(行的开头)和$
(行尾)伪字符。