我正在写一个正则表达式,其中字符串可以是2-3个字符。 第一个字符必须是A和H之间的字母(大写字母)。此字符后面必须是1到12之间的数字。 我写了
[A-H]{1}[1-12]{1,2}
当我键入A12
时这很好,但是当我键入A6
时
请建议。
答案 0 :(得分:3)
您不能指定这样的数字范围,因为它是作为字符之间的范围实现的,因此[1-12]
相当于[12]
,它只匹配1
或2
。相反,请尝试以下方法:
[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