Java 基于正则表达式的给定字符串求值
我生成了一个6个字符长的随机数。它可以是数字、字母和字母数字。我必须根据提供的正则表达式验证这个字符串。例如: 如果字符串是数字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]
[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也应该无效。