2012-01-20 59 views
0

我需要滾動List並移除包含一些特殊字符的所有字符串。使用正則表達式我能夠刪除所有以這些特殊字符開頭的字符串,但是如何才能找到這個特殊字符是否在字符串中間?使用正則表達式查找帶有特殊字符的字符串

例如:

Pattern.matches("[()<>/;\\*%$].*", "(123)") 

返回true,我可以刪除這個字符串

,但它並沒有用這種字符串的工作原理:12(3)。

使用\ *來查找字符串中「*」字符的出現是否正確?

感謝您的幫助! 安德烈

回答

5

你還沒有的另一個受害者Java的不良命名.matches()它試圖和匹配整個輸入和矛盾正則表達式匹配的非常清晰。

你想要的是匹配()<>/;\\*%$中的一個字符。使用Java,您需要從這個Pattern創建Pattern,一個Matcher並在此匹配使用.find()

final Pattern p = pattern.compile("[()<>/;\\*%$]"); 

final Matcher m = p.matcher(yourinput); 

if (m.find()) // match, proceed 
+0

工程:) Pattern.compile(「[()<> /; \\ *%$ ]。*「)。matcher(res).find() –

+1

請注意這裏'\ *':它將匹配字面星號。如果這是你想要的,那很好。如果你想匹配_both_反斜槓和星號,你需要匹配'「[()<> /; \\\\ *%$]''。 – fge

2

嘗試以下操作:

!Pattern.matches("^[^()<>/;\\*%$]*$", "(123)") 

本採用了否定的字符類,以確保該字符串中的所有字符都沒有任何在類的人物。

你明顯否定了表達式,因爲你正在測試一個不匹配的字符串。

使用\ *來查找字符串中出現「*」字符是否正確?

是。

0

Pattern.matches()試圖匹配整個輸入。所以,因爲你的正則表達式說輸入必須以「特殊」字符開頭,12(3)不匹配。