使用regex查找带有特殊字符的字符串

时间:2012-01-20 14:00:46

标签: java regex

我需要滚动一个List并删除包含一些特殊字符的所有字符串。使用RegEx我能够删除以这些特殊字符开头的所有字符串但是,如何找到这个特殊字符串是否在字符串的中间?

例如:

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

返回true,我可以删除此字符串

但它不适用于这种字符串:12(3)。

使用\ *在字符串中找到“*”char的出现是否正确?

感谢您的帮助! 安德烈

3 个答案:

答案 0 :(得分:5)

你是Java的名字.matches()的另一个受害者,它试图匹配整个输入,并且与正则表达式匹配的定义相矛盾。

你想要的是匹配()<>/;\\*%$中的一个字符。使用Java,您需要从此Pattern创建MatcherPattern并在此匹配器上使用.find()

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

final Matcher m = p.matcher(yourinput);

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

答案 1 :(得分:2)

尝试以下方法:

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

这使用否定字符类来确保字符串中的所有字符都不是类中的任何字符。

然后你显然否定了表达式,因为你正在测试一个不匹配的字符串。

  

使用\ *在字符串中找到“*”char的出现是否正确?

答案 2 :(得分:0)

Pattern.matches()尝试匹配整个输入。因此,由于你的正则表达式说输入必须以“特殊”字符开头,12(3)不匹配。