我的模式如下:
[number between 0-23]([delimiter][number between 0-23])+
分隔符可以是:/
或/*
。
看看圆括号中的内容可以重复多次。
例如:
8/12
3/*13
9/10/12
9/*10/11
这是我的代码:
public class Regext_PlayerMove {
public static void main(String[] args) {
System.out.println(parse("12/14"));
System.out.println(parse("14/4"));
System.out.println(parse("5/*7"));
System.out.println(parse("0/*7"));
System.out.println(parse("0/*7/9"));
System.out.println(parse("0/*7/*11"));
// Illegal data
System.out.println(parse("5/*77"));
System.out.println(parse("2/4/"));
System.out.println(parse("/1/*16/"));
System.out.println(parse("35/7"));
}
private static String parse(String path) {
Pattern p = Pattern.compile("^(1[0-9]|2[0-3]|[0-9])(\\/\\*|\\/)(1[0-9]|2[0-3]|[0-9])$");
Matcher m = p.matcher(path);
if (m.find()) {
return m.group(1) + m.group(2) + m.group(3);
}
return null;
}
}
只要我只进行一次重复就可以正常工作(例如:12/14)
有人可以帮助我了解如何扩展我的解决方案以捕获多次重复吗?
答案 0 :(得分:2)
使用+
重复上一个令牌一次或多次。
Pattern p = Pattern.compile("^(1[0-9]|2[0-3]|[0-9])(?:(/\\*?)(1[0-9]|2[0-3]|[0-9]))+$");
很难将每个人捕获到不同的组中,但您可以使用matches
方法检查true或false。