我的模式如下:
[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),它就可以工作
有人能帮助我了解如何扩展我的解决方案来捕捉多次重复吗?
使用+
重复上一个令牌一次或多次。
Pattern p = Pattern.compile("^(1[0-9]|2[0-3]|[0-9])(?:(/\*?)(1[0-9]|2[0-3]|[0-9]))+$");
演示
很难将它们分别捕获到不同的组中,但您可以使用matches
方法来检查true或false。