我正在编写一个正则表达式,其中字符串可以是 2-3 个字符。第一个字符必须是 A 和 H(大写字母)之间的字母。这个字符后面必须跟一个 1 到 12 之间的数字。我写了
[A-H]{1}[1-12]{1,2}
当我键入时这很好,但当我键入A12
时不行A6
请建议。
我正在编写一个正则表达式,其中字符串可以是 2-3 个字符。第一个字符必须是 A 和 H(大写字母)之间的字母。这个字符后面必须跟一个 1 到 12 之间的数字。我写了
[A-H]{1}[1-12]{1,2}
当我键入时这很好,但当我键入A12
时不行A6
请建议。
您不能指定这样的数字范围,因为它是作为字符之间的范围实现的,因此[1-12]
等效于[12]
,它只匹配 a1
或 a 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}
after[A-H]
是不必要的,[A-H]{1}
并且[A-H]
是等效的。
您可能需要考虑向正则表达式添加锚点,否则您还会在字符串上获得部分匹配,例如A20
. 如果您尝试匹配整个字符串,那么您应该使用以下内容:
\A[A-H](?:1[012]|[1-9])\z
如果它在较大的文本中,您可以使用单词边界:
\b[A-H](?:1[012]|[1-9])\b
干得好:
^[A-H]([1-9]|1[0-2])$
您问题中的 {1} 不需要。
正则表达式用 ^ 和 $ 锚定,这意味着它可以是您行中唯一的东西。例如,它与 A60 不匹配