java正则表达月份2位数

use*_*261 3 java regex

我只想抓住以下其中一项:

01 , 02 , ... , 09 , 10 , 11 , 12
Run Code Online (Sandbox Code Playgroud)

以下正则表达式是完整还是我错过了什么?

String monthPat = "^[1][0-2]|[0][1-9]$"
Run Code Online (Sandbox Code Playgroud)

And*_*ark 9

当前正则表达式的问题在于,通过替换,您尝试匹配以下表达式之一:

^[1][0-2]     # strings that start with '10', '11', or '12'
[0][1-9]$     # strings that end with '01' through '09'
Run Code Online (Sandbox Code Playgroud)

这意味着您可以使用较长字符串的部分匹配,例如,您将匹配"1000"开头的"10"和"2009"结尾处的"09".

确保在每一侧都包含两个锚点|来修复此问题:

^1[0-2]$|^0[1-9]$
Run Code Online (Sandbox Code Playgroud)

或者,您可以在组内部进行交替并将锚点放在外部:

^(1[0-2]|0[1-9])$
Run Code Online (Sandbox Code Playgroud)

请注意,我也从[1]和中删除了字符类(方括号)[0],因为含义相同.