匹配字母后跟特定的数字范围

时间:2012-05-18 22:25:19

标签: regex

我正在写一个正则表达式,其中字符串可以是2-3个字符。 第一个字符必须是A和H之间的字母(大写字母)。此字符后面必须是1到12之间的数字。 我写了

[A-H]{1}[1-12]{1,2}

当我键入A12时这很好,但是当我键入A6

请建议。

2 个答案:

答案 0 :(得分:3)

您不能指定这样的数字范围,因为它是作为字符之间的范围实现的,因此[1-12]相当于[12],它只匹配12。相反,请尝试以下方法:

[A-H](?:1[012]|[1-9])

以下是解释:

[A-H]        # one letter from A to H
(?:          # start non-capturing group
   1[012]      # 1 followed by 0, 1, or 2 (10, 11, 12)
   |           # OR
   [1-9]       # one digit from 1 to 9
)            # end non-capturing group

请注意,原始正则表达式中{1}之后的[A-H]是不必要的,[A-H]{1}[A-H]是等效的。

您可能需要考虑向正则表达式添加锚点,否则您还会在A20之类的字符串上获得部分匹配。如果您要匹配整个字符串,则应使用以下内容:

\A[A-H](?:1[012]|[1-9])\z

如果它在更大的文本中,您可以改为使用单词边界:

\b[A-H](?:1[012]|[1-9])\b

答案 1 :(得分:1)

你走了:

^[A-H]([1-9]|1[0-2])$

无需问题中的{1}。

正则表达式以^和$为基础,这意味着它可以是你唯一的东西。 例如,它不匹配A60