我正在尝试使用正则表达式过滤掉* /%。以下是我迄今为止尝试过的那些:
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 = "[\\*/%]";
答案 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);
此最终+
将匹配字符类中一个或多个符号。