如何从正则表达式中的模式匹配中排除某些字符?

时间:2016-10-16 18:49:07

标签: java regex

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

3 个答案:

答案 0 :(得分:1)

你走了:

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

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

答案 1 :(得分:0)

尝试^后跟您不想在方括号中匹配的字符。例如。 [^ k]将不匹配给定字符串中的k个字符。

答案 2 :(得分:0)

这个正则表达式可能适合你:

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

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