无法调整此模式的正则表达式

时间:2015-02-04 18:18:33

标签: java regex

我的模式如下:

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

有人可以帮助我了解如何扩展我的解决方案以捕获多次重复吗?

1 个答案:

答案 0 :(得分:2)

使用+重复上一个令牌一次或多次。

Pattern p = Pattern.compile("^(1[0-9]|2[0-3]|[0-9])(?:(/\\*?)(1[0-9]|2[0-3]|[0-9]))+$");

DEMO

很难将每个人捕获到不同的组中,但您可以使用matches方法检查true或false。