Java Regex捕获嵌套匹配

时间:2017-07-07 10:43:28

标签: java regex

我在这里使用正则表达式时遇到了麻烦。

说我有这个输入:

608094.21.1.2014.TELE.&BIG00Z.1.1.GBP

我的正则表达式看起来像这样

(\d\d\d\d\.\d?\d\.\d?\d)|(\d?\d\.\d?\d\.\d?\d?\d\d)

我想从字符串中提取日期21.1.2014,但我得到的只是

8094.21.1

我认为我的问题是,21.1.2014在之前的(错误)比赛中开始。有没有一种简单的方法可以让匹配器在比赛结束之前找到下一场比赛,而不是在比赛开始之后的一个角色?

3 个答案:

答案 0 :(得分:1)

如果日期总是被点包围:

\.(\d\d\d\d\.\d?\d\.\d?\d|\d?\d\.\d?\d\.\d?\d?\d\d)\.

答案 1 :(得分:1)

您可以使用这样的正则表达式:

\d{1,2}\.\d{1,2}\.\d{4}

<强> Working demo

或缩短它并使用:

(\d{1,2}\.){2}\d{4}

答案 2 :(得分:0)

我希望这会对你有所帮助。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String x = "608094.21.1.2014.TELE.&BIG00Z.1.1.GBP";
        String pattern = "[0-9]{2}.[0-9]{1}.[0-9]{4}";

        // Create a Pattern object
        Pattern r = Pattern.compile(pattern);

        // Now create matcher object.
        Matcher m = r.matcher(x);
        if (m.find( )) {
            System.out.println("Found value: " + m.group() );
        }else {
            System.out.println("NO MATCH");
        }
    }