使用String.matches()抛出PatternSyntaxException?

时间:2012-12-03 04:36:34

标签: java regex exception

我正在编写一个汇编程序来分析汇编代码并生成目标代码。但是,我遇到了一个正则表达式函数的问题。我没有使用java正则表达式的经验,所以我不太清楚我在做什么导致这个异常。下面是抛出异常的函数。被评估的第一个操作数是“0”,当然应该评估为假。

//Returns true if operand is a Symbol, false otherwise.
public boolean isSymbol(String operand){
    if(!operand.equals("")){
        if(((operand.matches("[a-zA-Z]*"))&&
                (!operand.matches(".'"))) ||(operand.matches("*"))){ //Exception
            return true;
        }
        else return false;
    }
    return false;
}

3 个答案:

答案 0 :(得分:1)

我认为你的问题是*表达式。 java regexpx中的*本身并不具有意义,它必须遵循其他内容(它意味着“零次或多次”)。 如果你想要文字*,你需要逃避它 - \\* 这是模式的javadoc,它列出了您的选项http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

答案 1 :(得分:1)

operand.matches("*")

matches采用正则表达式的String表示,'*'不是有效的正则表达式。对于长正则表达式介绍,您可以在此处查看:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

在正则表达式中,'*'字符表示“匹配前一个0次或更多次”。例如:

"a".matches("a*")        // is true
"aaaaaaa".matches("a*")  // is true
"aaaaaab".matches("a*b") // is true

如果要在输入字符串中匹配文字“”字符,则必须转义正则表达式中的“”,如下所示:

operand.matches("\\*")

然后

"a*".matches("a\\*")       // is true
"*".matches("\\*")         // is true
"aaaa*b".matches("a*\\*b") // is true
"0".matches("\\*")         // is false, which I think is what you want.

答案 2 :(得分:0)

尝试替换if条件如下:

if(((operand.matches("[a-zA-Z]+")) && !operand.matches(".'")))){`enter code here`

这里+表示1或更多,这确保了oprand中至少有一个a-z或A-Z。