我有一段代码根据用户提供的正则表达式从字符串中提取日期。有几种不同的配置系统的方法,但通常对用户来说最方便的是指定一个命名的捕获组,然后代码从中提取日期。例如:
Input: ABC-20130308
Regex: ABC-(?<date>\d{8})
代码非常简单:
Pattern p = Pattern.compile( regex );
Matcher m = p.matcher( input );
m.find();
m.group( "date" );
问题是,当用户没有指定命名组时,会m.group("date")
出现 IllegalArguementException。
我可以很容易地捕捉到这个异常并尝试获取日期的替代方法,但这基本上是使用异常来进行控制流。在我尝试得到它之前,我宁愿测试该组的存在。我是否错过了某种检查模式中是否存在命名组的方法?