Java 基于正则表达式的给定字符串求值

Java 基于正则表达式的给定字符串求值,java,regex,Java,Regex,我生成了一个6个字符长的随机数。它可以是数字、字母和字母数字。我必须根据提供的正则表达式验证这个字符串。例如: 如果字符串是数字[0-9],则不应包含所有零 如果字符串是字母[a-zA-Z],则最后一个字符不能是X或X。字符串不能以SVC或SVC开头 如果字符串是字母数字[0-9a-zA-Z],则它不能包含所有零0。字符串不能以三个零开始000,也不能以x或x结束 我需要这些可以与Java配合使用的正则表达式Matcher应该可以工作: /^((?!.{7,})[0-9]*[1-9]+[0-9]

我生成了一个6个字符长的随机数。它可以是数字、字母和字母数字。我必须根据提供的正则表达式验证这个字符串。例如:

如果字符串是数字
[0-9]
,则不应包含所有零

如果字符串是字母
[a-zA-Z]
,则最后一个字符不能是
X
X
。字符串不能以
SVC
SVC
开头

如果字符串是字母数字
[0-9a-zA-Z]
,则它不能包含所有零
0
。字符串不能以三个零开始
000
,也不能以
x
x
结束

我需要这些可以与Java配合使用的正则表达式
Matcher

应该可以工作:

/^((?!.{7,})[0-9]*[1-9]+[0-9]*|(?!(SVC|svc))[a-zA-Z]{5}[a-wy-zA-WY-Z]|(?!(000|.{7,}))[0-9a-zA-Z]*([a-zA-Z][0-9]|[0-9][a-zA-Z])+[0-9a-zA-Z]*[a-wy-zA-WY-Z])$/gm
我无法解释这个正则表达式,因为它太长了,只是重复应用相同的概念。但是,给定以下输入,它只匹配前五行:

002000
jfkasd
002dfd
sVcabc
abc65i
000000
00012c
0123ax
SVCabx
svcabc
abc65x
abc65X
这是我最初提出的尝试,它并不满足OP的所有条件,但它附带了一个解释:

/^((?!.{7,})[0-9]*[1-9]+[0-9]*|[a-zA-Z]{5}[a-wy-zA-WY-Z]|(?!000)[0-9a-zA-Z]{6})$/gm
说明(可在链接页面上阅读):

  • 我们有三个选项必须与整行匹配:
    ^(…|…|…)$
  • 第二个字母很简单:五个字母后跟一个字母,不是
    x
    x
    [a-zA-Z]{5}[a-wy-zA-wy-Z]
    [^xX]
    也会匹配数字或其他任何东西)
  • 第三种选择稍微复杂一些:六个字母或数字,前面没有
    000
    ;这使用了一个负的前瞻性,它之所以有效是因为锚定
    ^
    (如果删除它,它就会中断)
  • 第1种选择类似:零或多个数字,后跟一个或多个非0数字,后跟零或多个数字;所有字符不以7个或更多字符开头

字母数字大小写的两个条件中的第一个是多余的。如果数字不是以
000
开头,则不是全部
0
s。谢谢。给定的URL非常有助于使用它。此外,例如,SVCabc abc65X也应该无效。