2013-04-23 64 views
8

我有在Java中的正則表達式的問題無效的轉義序列(有效問卷是 B 牛逼 n ˚F r 」 」 )

當我嘗試使用這個表達式:

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 

我收到以下錯誤

"Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \)" 

我不知道如何處理錯誤。 我已經嘗試了反斜槓,但沒有奏效。 我希望有人能夠幫助我用這個。

感謝

+0

這是Java錯誤還是Regex錯誤? – Matthew 2013-04-23 20:53:33

+0

那麼你有一個\ d,它不是在有效的 – phil 2013-04-23 20:54:08

+1

加倍反斜槓應該工作。你確定你沒有錯過嗎? – Philipp 2013-04-23 20:55:23

回答

10

這應該工作^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$

的原因是,在錯誤信息中列出的符號有特殊含義,但\d是不是那些定義的特殊符號之一使用\,這意味着你有以逃避它(通過在符號前添加額外的\)。

+0

幫我用Java來解決這個「/ ^(?:HTTPS:\/\ /)?(?:WWW \)(?: youtu \ .BE \/| YouTube的\ .COM \ /(?: ??嵌入\/| v \/|手錶\ v = |觀看\ + v =))((\ W | - ){11})(?:?\ S +)$ /」 – Ashu 2016-11-25 08:58:14

7

每當你用Java編寫的正則表達式,請記住逃脫定義正則表達式的字符串中使用的\字符。換句話說,如果你的正則表達式包含一個\,那麼你必須寫兩個\\。例如,你的代碼應該是這樣的:

^(?:(?:([01]?\\d|2[0-3]):)?([0-5]?\\d):)?([0-5]?\\d)$ 

爲什麼,你問?因爲Java的字符串,\是用來表示特殊字符轉義字符(例如:標籤,新的生產線,等等),如果一個字符串包含\那麼它必須轉義,在它前面前面加上另一個\。因此,\\

爲了記錄在案,here是列出了有效的轉義字符及其含義Java語言規範頁面,注意最後一個:

\b backspace 
\t horizontal tab 
\n linefeed 
\f form feed 
\r carriage return 
\" double quote 
\' single quote 
\\ backslash 
1

您可以使用記事本++用查找/與//

更換
+1

是什麼點用''替換'/'?它是'''',它在正則表達式或字符串文字中是特殊的,所以它需要轉義。 – Pshemo 2016-10-19 10:28:06

相關問題