2017-10-16 48 views
0

我有一個不想要的行爲與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

回答

1

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

參見docs

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

由於正在與一個字符的String調用matches,所述條件將返回true。 如果你只想匹配「%20」的空格,您可以在條件中使用的實際空間,而不是\\s

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

+0

謝謝,這解決了我的問題。 – Roko

+0

@Roko歡迎您。 – Mena

0

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

您可以列出要匹配的每個單獨字符,也可以使用|(其中之一)和!(非)等運算符。如果您要逐行閱讀文本,則還可以使用^(行首)和$(行尾)僞字符。

相關問題