日期:2014-05-20  浏览次数:20754 次

正则表达式中的匹配个数
正则表达式:[yY]{2,4}[mM]{2}[dD]{2}([+-]\\d)?
用于匹配YYYYMMDD或YYMMDD的日期格式,请问如何设定Y这部分,让YYYY或YY符合条件,如果输入YYY则不允许呢?用[yY]{2,4}应该表示y或Y可以有2-4个,如何屏蔽3个的情况呢?谢谢~

------解决方案--------------------
String regex = "(?i)yy(?:yy)?mmdd(?:[+-][0-9])?";
------解决方案--------------------
3楼的挺好的。你可以先忽略大小写。这样的话,就不用比较是Y或是y了。

你也可以(?:yy){1,2} 也可以达到yy或yyyy的效果的
------解决方案--------------------
(([yY]{2})|([yY]{4}))
------解决方案--------------------
(?i)(?:yy){1,2} 这个正则,就只识别yy或yyyy,不能识别yyy
(yy){1,2}表示yy只能有1个或2个,当有1个时,就是yy;当有2个,就是yyyy。

探讨

引用:

不好意思,不解释清楚。

是这样的,正则表达式有一个模式修饰符的,加上修饰符就会有一些副作用的。
用法:(?modifier)
如(?i) 就表示这个修饰符会忽略大小写

所以y|Y都可以用(?i)[y]来匹配。

由于你需要的是yy或yyyy或YY或YYYY或YyyY或....,所以(?i)(?:yy){1,2}
这里的?:表示只是……

------解决方案--------------------
探讨

(?:yy){1,2}这里的?:是什么意思?另外我用(?:yy){1,2}?mmdd(?:[+-][0-9])?后发现,对于YYmmdd格式的就无法识别了?