我正在尝试创建一个十六进制计算器,但我对regex
有疑问。
基本上,我希望字符串只接受0-9
,A-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+-*_]+
^
答案 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();
}