限制捕获组的字符数

时间:2015-03-26 16:17:43

标签: regex

假设我有这样的文字:"AAAA1 AAA11 AA111AA A1111 AAAAA AAAA1111"

我想找到符合这3个标准的所有事件:
  - 首字母1至4次
  - 数字1至4次
 -Max字符数为5

所以比赛将是:
{"AAAA1", "AAA11", "AA111", "A1111", "AAAA1"}

我试过

([A-Z]{1,4}[0-9]{1,4}){5}

但我知道它会失败,因为它正在寻找我的团队五次。

有没有办法将组的结果限制为5个字符?

由于

1 个答案:

答案 0 :(得分:6)

您可以在匹配零件的同时检查图案时向前看限制字符数。

如果您可以按空格分割输入,则可以使用:

^(?=.{2,5}$)[A-Z]{1,4}[0-9]{1,4}$

请参阅demo here

如果您无法按空格分割,则可以使用捕获组(?:^| )(?=.{2,5}(?=$| ))([A-Z]{1,4}[0-9]{1,4})(?=$| ),或者使用lookbehind或\K进行拆分,具体取决于您的正则表达式风格(请参阅demo)。< / p>


以前的答案,错误地匹配A1A1A,在@a_guest评论后更新。

您可以使用前瞻来检查您的模式,同时使用正则表达式的匹配部分限制字符数:

(?=[A-Z]{1,4}[0-9]{1,4}).{2,5}

请参阅demo here