regex - 寻找最大匹配的正则表达式模式
问题描述
我正在寻找一种可以根据最大出现次数限制匹配的正则表达式模式。
例如,匹配长度为 6-12 个字符的字母数字字符串,并且包含最少 2 个但不超过 4 个大写字母,无论它们在字符串中的每个位置如何。
我试过这种模式,但只有大写字母彼此相邻时才匹配。
^([A-Z]{2,4}).{8,12}$
有效的匹配是:
HamBurger (2 uppercase, Length = 9)
LeTtUce (3 uppercase, Length = 7)
TACOss (4 uppercase, Length = 6)
但无效匹配将是:
ABCDE1234 (too many uppercase letters)
aBcDeFgHiJ (too many uppercase letters)
ADBC (length too short)
提前感谢您的任何帮助。
解决方案
您可以使用基于前瞻的解决方案,例如
^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$).{6,12}$
或者,为了使其更精简,将长度检查移到开头(进入前瞻):
^(?=.{6,12}$)(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$
细节
^
- 字符串的开头(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)
- 正向前瞻,需要 2 到 4 次重复 0+ 字符而不是大写字母,后跟一个大写字母,然后是任何 0+ 字符而不是大写字母到字符串的末尾.{6,12}
- 6 到 12 个字符$
- 字符串结束。
推荐阅读
- c# - 实例化一个预制件,然后向它添加一个力(Projectile) - Unity
- java - 导入 com.google 无法解析 VSCode
- java - 无法在浏览器或终端中显示流数据
- node.js - 按顺序调用错误的 Express API 资源
- python - SQL语法问题——转义单引号和百分号
- spring-boot - 有没有办法使用属性文件中的路径变量提取 @RequestMapping 路径?
- ssis - 如何使用 SSIS 将 zip 文件发送到 One Drive
- html - 如何在html中使用屏幕大小更改div高度?
- gcc - 为什么动态库源代码应该使用与位置无关的代码编译?
- javascript - 如何为 swiperjs 插件使用类似 scrollTo 功能的东西