0

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

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

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

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

4

2 回答 2

4

您需要负前瞻,即与整个输入匹配的前瞻:(?!^-+$).*

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

印刷

true
true
false
false
true
true
于 2012-10-31T13:49:41.283 回答
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
于 2012-10-31T13:49:32.820 回答