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

问题描述:

我有一个不想要的行为与Pattern.matches()方法。Java正则表达式换行符与制表符或空格错误匹配

我想我的正则表达式不检测换行符。

下一个代码返回true,但我不知道为什么:

String text = "\n"; 

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

我应该在正则表达式换回假?

+2

这里有什么奇怪的东西? '\ s'匹配所有空格,包括换行符 – anubhava

+0

\ s是空格 - > \ n是一个空格。 –

+1

'\ s'包含'\ t',所以'\ t | \ s'与'\ s'相同。 – Bohemian

\\s包含所有空格,其中又包含新行。

参见docs

\ S空白字符:[\吨\ n \ X0B \˚F\ R]

由于正在与一个字符的String调用matches,所述条件将返回true。 如果你只想匹配“%20”的空格,您可以在条件中使用的实际空间,而不是\\s

if(Pattern.matches("\\t| ",text)){

+0

谢谢,这解决了我的问题。 – Roko

+0

@Roko欢迎您。 – Mena

Pattern API\s代表a whitespace character: [ \t\n\x0B\f\r]。因此,它将匹配任何这些。

您可以列出要匹配的每个单独字符,也可以使用|(其中之一)和!(非)等运算符。如果您要逐行阅读文本,则还可以使用^(行首)和$(行尾)伪字符。