java -

  显示原文与译文双语对照的内容
0 0

我有几行代码


String time ="14:35:59.99";
String timeRegex ="(([01][0-9])|(2[0-3])):([0-5][0-9]):([0-5][0-9])(.([0-9]{1,3}))?";
String hours, minutes, seconds, miliSeconds 
Pattern pattern = Pattern.compile(timeRegex);
Matcher matcher = pattern.matcher(time);
if(matcher.matches()) {
 hours = matcher.replaceAll("$1");
 minutes = matcher.replaceAll("$4");
 seconds = matcher.replaceAll("$5");
 miliSeconds = matcher.replaceAll("$7");

%7D

使用 matcher.replace 方法和 正规表达式 组的反向引用来获取小时。分钟。秒和毫秒。 是否有更好的方法来获取 正规表达式 组的值。 我试过


hours = matcher.group(1);

但它引发了异常


java.lang.IllegalStateException: No match found
 at java.util.regex.Matcher.group(Matcher.java:477)
 at com.abnamro.cil.test.TimeRegex.main(TimeRegex.java:70)

我在这里漏掉了什么?

时间: 原作者:

0 0

如果你避免调用 matcher.replaceAll,它工作正常。 当你打电话给 replaceAll 它就会忘记以前的任何匹配。


String time ="14:35:59.99";
String timeRegex ="([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])(?:.([0-9]{1,3}))?";
Pattern pattern = Pattern.compile(timeRegex);
Matcher matcher = pattern.matcher(time);
if (matcher.matches()) {
 String hours = matcher.group(1);
 String minutes = matcher.group(2);
 String seconds = matcher.group(3);
 String miliSeconds = matcher.group(4);
 System.out.println(hours +"," + minutes +"," + seconds +"," + miliSeconds);
}

注意,我还对正则表达式进行了一些改进:

  • 对于你不感兴趣的组,我使用非捕获组 (?:.. . ) 对它的进行分组。
  • 我已经更改了 .,它匹配任何匹配一个字符的字符到 .

请参阅联机工作:ideone web

原作者:
0 0

如果在调用组函数之前使用 matcher.find(),它将。

原作者:
...