用Java中的正则表达式过滤多个符号

时间:2016-01-22 18:26:52

标签: java regex

我正在尝试使用正则表达式过滤掉* /%。以下是我迄今为止尝试过的那些:

String reg = "[\\*]||[/]||[%]";
String reg2 = "[*]||[/]||[%]";
String reg3 = "*/%";

以上所有都给出了同样的例外:

java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 *

但是,我确实有另外一个可以进一步分类:

String reg4 = "[0-9\\*+\\-/%]";

那个工作得非常好。

我也试过单独整理标志,我唯一挣扎的就是“*”。我只试过那个是:

String reg1 = "*";
String reg2 = "\\*";
String reg3 = "[\\*]";

两者都给出了我之前提到的相同的例外。

相关代码:

/*
* calc1 is an ArrayList<String>
*/
public void solve() {
    while(calc1.size() > 1) {
        for(int i = 0; i < calc1.size(); i++) {
            if(calc1.get(i).matches("regex")) calculate(i);
        }
    }
    System.out.println(calc1.toString());
}

修改

尝试的建议:

String reg = "[*/%]";
String reg2 = "[\\*/%]";

1 个答案:

答案 0 :(得分:0)

请注意,String#matches需要完整的字符串匹配。要么使用Matcher#find()(需要更多代码),要么使用

if(calc1.get(i).matches("(?s).*" + regex + ".*")) calculate(i); 

其中regex是包含[*/%]的变量或您拥有的任何正则表达式。

(?s)将确保.也匹配换行符,从而确保完整字符串(包含您在字符类中定义的字符)匹配。

如果您只想处理等于模式的字符串,则不需要.*位,但需要应用量词(如果可以有多个) :

if(calc1.get(i).matches(regex + "+")) calculate(i);

此最终+将匹配字符类中一个或多个符号。