2012-01-20 57 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)不匹配。