2011-03-07 76 views
0

我想讀別人的代碼,並且我碰到了這段正則表達式。任何人都可以告訴作者試圖做什麼?你能破譯這個正則表達式嗎

if(str.matches("^\\s*$") && !str.matches("^\\s*#.*")) { 
     // do something 
} 
+3

我不知道他在做什麼。但他實際上做的是證明他不理解正則表達式......或布爾邏輯:-) – 2011-03-07 00:50:12

+0

@Stephen:或者,作者可能會對被查找的條件感到困惑。在限制範圍內,正則表達式很好;它是連接導致故障的兩個測試的邏輯。 – 2011-03-07 00:53:43

+0

我正在輕浮... – 2011-03-07 01:40:22

回答

3

第一個模式查找空行 - 一行只包含空格(空格,製表符等)。

第二個模式查找以空格開頭的行,後面跟着#(散列),並忽略它們。

這很奇怪;任何匹配第一個正則表達式的東西都不會匹配第二個正則表達式,所以第二個測試是毫無意義的。爲了使意義上說,測試也許應該是:

if (!str.matches("^\\s*$") && !str.matches("^\\s*#.*")) { 
     // do something with non-blank, non-comment lines 
} 

或者:如果字符串僅由空格

if (str.matches("^\\s*$") || str.matches("^\\s*#.*")) { 
     // do something with all blank or all comment lines (like ignore them) 
} 
+0

謝謝。說得通 – rakeshr 2011-03-07 01:01:37

4

第一個正則表達式匹配任何只包含空白字符(例如空格和製表符)的行。

^ -- start of line 
\\s -- interpolated to \s, a blank character 
* -- any number of 
$ -- end of line 

第二個正則表達式似乎是多餘的,因爲這將匹配以井開始的行,不包括前導空白。無論如何,這樣一條線不會匹配第一個正則表達式。

更新:我的猜測是作者也打算否定第一個正則表達式。這將運行if的主體,看起來不像評論。

2

第一個正則表達式返回true。第二個檢查它不是與#(和之前的空格,以及隨機之後)中的一些字符串,但是這種情況從未發生過,因爲字符串只包含空格。這看起來像一個bug ...

1

這隻會檢查一個完全由空白(或空字符串)組成的字符串。第二個正則表達式不起作用,因爲任何匹配第一個正則表達式的字符串都不會與第二個正則表達式匹配。

1

str.matches("^\\s*$")說:「是字符串或者爲空,或者只包含空格」和!str.matches("^\\s*#.*")說「的字符串不匹配的一些前導空格,然後是#,其次是0個或多個其他字符的」,這基本上是說「這個字符串沒有領先的#字符」。

相關問題