2011-09-30 244 views
13

我想確定傳入我的表達式類的表達式是否有運算符。 +-*/^分別用於加,減,乘,除以及指數。Java正則表達式字符類中的非法轉義字符

這段代碼有什麼問題?

private static boolean hasOperator(String expression) 
{ 
    return expression.matches("[\+-\*/\^]+"); 
} 

我認爲我有特殊字符的正確轉義,但我不斷收到錯誤:在編譯的時候「非法轉義字符」。

感謝您的幫助。

回答

27

不要逃避不需要進行轉義什麼:

return expression.matches("[-+*/^]+"); 

應該只是罰款。大多數正則表達元字符(.,(,),+,*等)在字符類中使用時會失去其特殊含義。您需要注意的是[,-,^]。而在過去三年,你可以戰略性置身其中焦炭類,所以他們不會拿自己特殊的意義:

  • ^可以放在任何地方,除了左括號之後:[a^]
  • -可以放置右括號前開口托架或右後右:[-a][a-]
  • ]可以左括號後右側放置:[]a]

但是,以供將來參考,如果您需要包括一個反斜槓作爲一個正則表達式字符串轉義字符,你需要轉義兩次,比如:

"\\(.*?\\)" // match something inside parentheses 

所以匹配一個反斜槓,你」 d需要四個:

"hello\\\\world" // this regex matches hello\world 

另注:String.matches()會嘗試將整個字符串與模式匹配,所以,除非你的字符串只是由一堆運營商的,你需要使用類似.matches(".*[-+*/^].*");的東西代替(或使用Matcher.find()

+0

哈,我瘋了,以爲我需要逃避*當問題是訂購+ - *它意味着範圍「通過加星號」,而不是「加號或減號或星號「。感謝您的明確! – WebChemist