为这种模式调整正则表达式时遇到问题



我的模式如下:

[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。

最新更新