如何在正则表达式中排除特定字符进行模式匹配?

3
我正在尝试实现自己的atoi版本,因此我想检查我的字符串是否包含非数字字符并处理错误,但我也希望搜索模式排除+和-符号(即仅在字符串开头的+和-是有效符号)。我目前有word.matches("^[+=][a-zA-Z]+"),但不确定如何相应地更改它以适应我的需求。 例如:20e48无效,204-8无效,+2048有效,-2048也有效。

word.matches("[-+]?\\d+")? - Wiktor Stribiżew
3个回答

3

这是您需要的内容:

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

如果任何字符串不符合此模式,则它不是有效的输入。

太棒了!谢谢!你介意解释一下吗?抱歉,我对这个还是很新,希望能理解这个正则表达式! - lenignes
1
word.matches("[-+]?\\d+")就足够了。在matches()内,默认情况下正则表达式是锚定的。 - Wiktor Stribiżew

1
尝试在方括号中使用^和不想匹配的字符。例如,[ ^k ] 将不匹配给定字符串中的k字符。

0

以下的正则表达式可能适用于您:

^[+-]{0,1}[0-9]*[^0-9]+[0-9]*$

它匹配任何以+或-(可选)开头的字符串,后跟0个或多个数字字符,后跟1个或多个非数字字符,后跟0个或多个数字字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接