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