我在正则表达式帖子中进行了大量搜索,但没有找到我想要的解决方案。
我有正则表达式([a-zA-Z] {6} [a-zA-Z0-9] {2}([a-zA-Z0-9] {3})吗?)接受这些情况:
空字符串
(6个字母)+(2个字母数字)
(6个字母)+(2个字母数字)+(3个字母)
现在,我正在寻找的是修改我的正则表达式以接受任何位置的额外可选char%,无论出现多少次,但在当前正则表达式中仅保留字母和字母数字的最大值MAX。
例子:
空刺->正确
AABB->错误(当没有%时,恰好需要6个字母+ 2个字母数字)
AABB%->正确
AA33%->错误(数字前需要精确的6个字母)
AA%33->正确(%作为通配符使用,请避免使用最大值)
A%3->正确
AA%33%->正确
%AA33%->正确
%AA3%->正确
AAAAAA33->正确
AABBCCXX->正确
AABBCC44XXX->正确
AABBCC44XXXE->错误(不考虑alpha的长度)
%AABBCC44XXXE->错误(不考虑字母的长度)
%AAB%BCC4%4X%XX%->正确(因为应忽略%的长度,此处应考虑字母和字母数字的长度)
有可能吗?
最佳答案
下面的正则表达式应该足够接近。
^(?:(?=.*%)(?![A-Z]{1,5}[0-9])(?:%?[A-Z]){0,6}(?:(?:%?[A-Z0-9]){1,2})?(?:(?:%?[A-Z]){1,3})?%?)$|^(?:[A-Z]{6}(?:[A-Z0-9]{2})(?:[A-Z]{3})?)$|^$
请注意管道(| = OR)如何分隔3个正则表达式。
一个给那些有%的人,然后是那些没有%的人,然后是空白。
此外,字符类仅使用大写的
A-Z
。因此,为了允许小写字母,请让regex忽略大小写,或将其替换为
A-Za-z
。您可以here对其进行测试
更短的选择:
^(?=.*%)(?![A-Z]{1,5}[0-9])(?!(?:.*?[0-9]){3})(?:%?[A-Z0-9]){1,11}%?$|^(?:[A-Z]{6}[A-Z0-9]{2}(?:[A-Z]{3})?)$|^$