Java正则表达式换行符与制表符或空格错误匹配

时间:2017-10-16 15:46:27

标签: java regex

我使用Pattern.matches()方法有不受欢迎的行为。

我希望我的正则表达式不会检测到换行符。

下一个代码返回true,但我不知道原因:

    String text = "\n";

    if(Pattern.matches("\\t|\\s",text)){
        System.out.println("True");
    }
    else{
        System.out.println("False");
    }

我应该在正则表达式中更改什么才能返回false?

2 个答案:

答案 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]。因此,它将匹配其中任何一个。

您可以列出要匹配的每个字符,也可以使用|(任一)和!等操作符(不是)。如果您逐行浏览文本,则还可以使用^(行的开头)和$(行尾)伪字符。