我在正则表达式帖子中进行了大量搜索,但没有找到我正在寻找的解决方案。
我有正则表达式 ([a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?) ?接受这些案例:
- 空字符串
- (6 个字母)+(2 个字母数字)
- (6 个字母) + (2 个字母数字) + (3 个字母)
现在,我正在寻找的是修改我的正则表达式,以在任意位置接受额外的可选字符 % ,但仅保留数量 MAX当前正则表达式中的字母和字母数字。
示例:
- 空刺 -> 正确
- AABB -> 错误(没有 % 时需要 6 个字母 + 2 个字母数字)
- AABB% -> 正确
- AA33% -> 错误(数字前需要 6 个字母)
- AA%33 -> 正确(% 用作通配符并避免最大数字)
- A%3 -> 正确
- AA%33% -> 正确
- %AA33% -> 正确
- %AA3% -> 正确
- AAAAAA33 -> 正确
- AABBCCXX -> 正确
- AABBCC44XXX -> 正确
- AABBCC44XXXE -> 错误(不考虑 alpha 长度)
- %AABBCC44XXXE -> 错误(不考虑 alpha 长度)
- %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
。
因此,为了也允许使用小写字母,要么让正则表达式忽略大小写,要么用 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})?)$|^$
关于java - 正则表达式接受最大的字母和字母数字以及额外的%(无限制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43251756/