0

我正在编写一个汇编程序来分析汇编代码并生成目标代码。但是,我在使用其中一个正则表达式函数时遇到了一些问题。我没有使用 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;
}
4

3 回答 3

1
operand.matches("*")

匹配采用正则表达式的字符串表示形式,并且 '*' 不是有效的正则表达式。对于长的正则表达式介绍,你可以看这里: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.
于 2012-12-03T04:47:25.143 回答
1

我认为你的问题是*表达。*在 java regexpx 中,它本身是有意义的,它必须遵循其他的东西(它的意思是“零次或多次”)。如果您想要文字*,则需要对其进行转义-\\* 这是 Pattern 的 javadoc,其中列出了您的选项http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

于 2012-12-03T04:40:59.443 回答
0

尝试替换 if 条件如下:

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

这里 + 表示 1 或更多,这确保 oprand 中至少有一个 az 或 AZ。

于 2012-12-03T06:00:21.873 回答