Java Regex接受除了所有破折号之外的任何字符串

时间:2012-10-31 13:46:55

标签: java

我遇到了创建一个接受除了所有破折号之外的任何字符串的正则表达式的问题,即如果字符串包含所有破折号,则应该拒绝它。

我试过[0-9-]*,但它接受所有破折号 和-*[0-9]+它做我想要的但不允许改组(我的意思是混合字符串0-9和 - (破折号))。

例如trt-09tr-应该被接受。 --- rte434rt应该被接受。 - 应该被拒绝。 ------应该被拒绝。 --- 6接受了。 - 我接受了。

如果有人可以帮助我。 谢谢

2 个答案:

答案 0 :(得分:4)

你需要负面的预测,一个匹配整个输入:(?!^-+$).*

for (String in : new String[] {"trt-09tr-", "---rte434rt", "-", "------", 
                               "---6", "--u"})
  System.out.println(in.matches("(?!^-+$).*"));

打印

true
true
false
false
true
true

答案 1 :(得分:3)

试试这个正则表达式:

^-*$

匹配的每个字符串都可以丢弃。

String r = "^-*$";
System.out.println(!"----".matches(r));    // false
System.out.println(!"--e--".matches(r));   // true
System.out.println(!"-e-e-e-".matches(r)); // true