2011-01-25 24 views
8

瑣碎的正則表達式的問題(答案最有可能是針對Java):爲什麼這個正則表達式在Java中沒有像預期的那樣工作?

"#This is a comment in a file".matches("^#") 

這返回false。據我所知,^意味着它總是意味着什麼,並且#沒有特別的意義,所以我會將^#翻譯爲字符串開頭的「A'#」。應該匹配。所以它在Perl中有:

perl -e "print '#This is a comment'=~/^#/;" 

打印「1」。所以我很確定答案是Java特定的。有人請賜教嗎?

謝謝。

回答

17

Matcher.matches()檢查整個輸入字符串是否與正則表達式匹配。

由於您的正則表達式只匹配第一個字符,它會返回false

你會想用Matcher.find()來代替。

誠然,它可以是一個有點棘手找到具體的規範,但它的存在:

+0

這是正確的答案,謝謝。這是記錄在某處嗎?因爲我無法從String.matches的文檔中讀到這個:「判斷這個字符串是否與給定的正則表達式匹配。」聽起來不像你所描述的那樣。 – 0xCAFEBABE 2011-01-25 10:02:18

+0

我一直理解「匹配」來暗示「整個輸入」,但我已經在上面添加了完整的解釋(以及如何找到它)。 – 2011-01-25 10:11:12

+0

謝謝一堆。 – 0xCAFEBABE 2011-01-25 10:12:21

2

matches方法你對整個字符串的正則表達式匹配。

因此,請嘗試添加.*以匹配字符串的其餘部分。

"#This is a comment in a file".matches("^#.*") 

其返回true。人們甚至可以從正則表達式中刪除所有的錨點(包括開始和結束),並且方法會爲我們添加它。所以在上述情況下,我們也可以使用"#.*"作爲正則表達式。

0

這應該符合您的期望:

"#This is a comment in a file".matches("^#.*$") 

現在輸入字符串相匹配「的第一個字符應爲#,其餘的應是任何字符」


繼Joachims評論中,以下是等效的:

"#This is a comment in a file".matches("#.*") 
相關問題