0

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

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

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

请建议。

4

2 回答 2

3

您不能指定这样的数字范围,因为它是作为字符之间的范围实现的,因此[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
于 2012-05-18T22:29:13.527 回答
1

干得好:

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

您问题中的 {1} 不需要。

正则表达式用 ^ 和 $ 锚定,这意味着它可以是您行中唯一的东西。例如,它与 A60 不匹配

于 2012-05-18T22:30:38.563 回答