Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java正则表达式第2个月的数字_Java_Regex - Fatal编程技术网

java正则表达式第2个月的数字

java正则表达式第2个月的数字,java,regex,Java,Regex,我只想捕捉以下内容之一: 01 , 02 , ... , 09 , 10 , 11 , 12 下面的正则表达式是完整的还是我遗漏了什么 String monthPat = "^[1][0-2]|[0][1-9]$" 当前正则表达式的问题是,在替换时,您试图匹配以下表达式之一: ^[1][0-2] # strings that start with '10', '11', or '12' [0][1-9]$ # strings that end with '01' throug

我只想捕捉以下内容之一:

01 , 02 , ... , 09 , 10 , 11 , 12
下面的正则表达式是完整的还是我遗漏了什么

String monthPat = "^[1][0-2]|[0][1-9]$"

当前正则表达式的问题是,在替换时,您试图匹配以下表达式之一:

^[1][0-2]     # strings that start with '10', '11', or '12'
[0][1-9]$     # strings that end with '01' through '09'
这意味着您可以对较长字符串进行部分匹配,例如,您将在“1000”开头匹配“10”,在“2009”结尾匹配“09”

确保在
|
的每一侧都包含两个锚固件以修复此问题:

^1[0-2]$|^0[1-9]$
或者,您可以在组内进行交替,并将锚定放置在外部:

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

请注意,我还从
[1]
[0]
中删除了字符类(方括号),因为其含义是相同的。

从我看到的情况来看,您正在进行验证。如果您使用String类中的
匹配
方法执行这些操作,则不需要锚定
^
$

您可以将其缩短一点,因为只有1个字符时不需要字符类:

"1[0-2]|0[1-9]"
如果将上面改进的正则表达式与String类中的
matches
方法一起使用,则可以使用它,因为如果提供的模式与整个字符串匹配,则
matches
方法将返回
true

请注意,如果单独考虑正则表达式,则其含义略有不同

"^[1][0-2]|[0][1-9]$"
如果将其馈送到
模式.compile
,然后使用
Matcher.find
类,这将匹配以10到12开头或以01到09结尾的子字符串,因为交替将在两个子模式之间交替:
^[1][0-2]
[0][1-9]$
。换成

"^(?:1[0-2]|0[1-9])$"
只有当字符串正好是01到12时,它才会找到匹配项


当您用其他语言编写代码时,这些知识非常有用,因为与正则表达式一起工作的String类/实用程序的
match
方法可能会返回与正则表达式匹配的子字符串,如果您不指定锚点
^
$

编写单元测试并将这些字符串和一些非法字符串馈送给它,比如13和23…@Rob我认为
10
是一个有效的月份。请您自己检查一下,然后您可以要求improvements@Dave哈哈,是的,谢谢你。它能抓住上面所有的东西,但我担心它能抓住其他的东西。我不确定我是否正确使用了[]和|