Ruby正则表达式指定捕获组的长度

时间:2016-09-19 08:15:07

标签: ruby regex

我需要匹配一个可变长度的字符串(在5到12之间),由大写字母和1到8之间的一个或多个数字组成。 如何指定我需要整个捕获组的长度在5到12之间? 我试过括号但没有运气。 我试过这个

\s([A-Z]+[1-8]+[A-Z]+){5,12}\s

我的想法是使用量词{5,12}来限制所捕获的组在括号之间的长度,但显然它不会那样工作。

需要在普通文本中识别字符串,就像

一样
"THE STRING I NEED TO DECODE IS SOMETHING LIKE FD1531FHHKWF BUT NOT LIKE g4G58234JJ"

2 个答案:

答案 0 :(得分:2)

您实际上有两个条件可以满足:

匹配的长度用大括号{5,12}指定,之前和之后不应有字母/数字。所以:

/(?!\b[A-Z]+\b)\b[A-Z1-8]{5,12}\b/

首先,我们保证只有字母的前瞻是否定的,然后我们会寻找模式。

答案 1 :(得分:1)

对正则表达式的总大小使用积极的预见

\s(?=^.{5,12}$)([A-Z]+[1-8]+[A-Z]+)\s

说明

(?=        # look-ahead match start
^.{5,12}$  # 3 to 15 characters from start to end
)          # look-ahead match end