[英]How do I exclude certain characters from pattern matching in regex?
我正在尝试实现我自己的 atoi 版本,因此我想检查我的字符串是否包含非数字字符并处理错误,但我还希望搜索模式排除 + 和 - 符号(即 + 和 -只有在字符串的开头是有效符号)。 我目前有word.matches("^[+=][a-zA-Z]+")
,但我不确定如何相应地更改它以满足我的需要。 例如:20e48 无效,204-8 无效,+2048 有效,-2048 也是如此
干得好:
public static void main(String[] args) {
String pattern = "^[+-]?[0-9]+$";
System.out.println("20e48".matches(pattern));
System.out.println("204-8".matches(pattern));
System.out.println("+2048".matches(pattern));
System.out.println("-2048".matches(pattern));
System.out.println("2048".matches(pattern));
}
它打印:
false
false
true
true
true
解释:
^ => Starts
[+-] => Either plus or minus sign
? => Zero or one occurance
[0-9] => Any number
+ => One or more occurance
$ => End
如果任何字符串与此模式不匹配,则它不是有效输入。
尝试 ^ 后跟您不想在方括号中匹配的字符。 例如 [^k] 将不匹配给定字符串中的 k 个字符。
这个正则表达式可能对你有用:
^[+-]{0,1}[0-9]*[^0-9]+[0-9]*$
它匹配(可选)以 + 或 - 开头、后跟 0 个或多个数字字符、1 个或多个非数字字符、0 个或多个数字字符的任何字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.