java - 正则表达式接受最大的字母和字母数字以及额外的%(无限制)

标签 java regex regex-negation regex-lookarounds

我在正则表达式帖子中进行了大量搜索,但没有找到我正在寻找的解决方案。

我有正则表达式   ([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/

相关文章:

c# - 解析正则表达式时出错

regex - 在 Linux 服务器上使用 "find"和正则表达式否定

regex - 仅使用 R 捕获 IP 地址

java - 如何使用与 EC2 实例关联的 IAM 角色(在 Java 中)从 Amazon 检索临时 AWS 凭证?

java - 以编程方式配置 Akka ClusterRouting

python - 删除字符串中的重复 block

javascript - Jquery - Chrome 和 Firefox 中的正则表达式按键操作不同

php - 正则表达式匹配一个空的(或全是空白的)字符串

java - 如何在android中获取文件数组的大小?

java - 使用 GridBagLayout 将 JPanel 内的组件居中