基类的正则表达式

时间:2013-05-06 03:23:37

标签: java regex

我正在尝试创建一个十六进制计算器,但我对regex有疑问。

基本上,我希望字符串只接受0-9A-E和特殊字符+-*_

无论我如何更改正则表达式,我的代码都会返回false,并且添加星号会给我PatternSyntaxException错误。

public static void main(String[] args) {

    String input = "1A_16+2B_16-3C_16*4D_16";

    String regex = "[0-9A-E+-_]";

    System.out.println(input.matches(regex));

}

每当我添加*作为正则表达式的一部分时,它都会给我这个错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 9
[0-9A-E+-*_]+
         ^

3 个答案:

答案 0 :(得分:3)

您需要将多个字符与正则表达式匹配。目前看来,你只匹配一个角色。

要匹配一个或多个字符,请在正则表达式的末尾添加+

[0-9A-E+-_]+

同样匹配*只需在括号中添加一个星号,这样最终的正则表达式就是

[0-9A-E+\\-_*]+

你需要逃避-,否则正则表达式认为你想接受+_之间的所有角色,这不是你想要的。

答案 1 :(得分:1)

你的正则表达式是可以的,应该没有例外,只需在正则表达式的末尾添加+,这意味着一个或多个字符就像括号中的字符一样,似乎你也希望*

"[0-9A-E+-_]+"

答案 2 :(得分:0)

public static boolean isValidCode (String code) {
    Pattern p = Pattern.compile("[fFtTvV\\-~^<>()]+"); //a-zA-Z
    Matcher m = p.matcher(code);
    return m.matches();
}