首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用String.matches()抛出PatternSyntaxException?

用String.matches()抛出PatternSyntaxException?
EN

Stack Overflow用户
提问于 2012-12-03 12:36:34
回答 3查看 793关注 0票数 0

我正在写一个汇编程序,它分析汇编代码并生成目标代码。但是,我遇到了一些关于regex函数的问题。我没有使用java正则表达式的经验,所以我不太确定我在做什么来引起这个异常。下面是抛出异常的函数。要计算的THe第一个操作数是"0",它当然应该计算为false。

代码语言:javascript
复制
//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;
}
EN

回答 3

Stack Overflow用户

发布于 2012-12-03 12:40:59

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

票数 1
EN

Stack Overflow用户

发布于 2012-12-03 12:47:25

代码语言:javascript
复制
operand.matches("*")

matches采用正则表达式的字符串表示形式,而'*‘不是有效的正则表达式。对于长长的正则表达式简介,您可以查看这里:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

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

代码语言:javascript
复制
"a".matches("a*")        // is true
"aaaaaaa".matches("a*")  // is true
"aaaaaab".matches("a*b") // is true

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

代码语言:javascript
复制
operand.matches("\\*")

然后

代码语言:javascript
复制
"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.
票数 1
EN

Stack Overflow用户

发布于 2012-12-03 14:00:22

尝试替换if条件,如下所示:

代码语言:javascript
复制
if(((operand.matches("[a-zA-Z]+")) && !operand.matches(".'")))){`enter code here`

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13677208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档