有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java正则表达式捕获嵌套匹配

我这里的正则表达式有问题

假设我有这个输入:

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)

我想从字符串中提取2014年1月21日的日期,但我得到的只是

8094.21.1

我认为我的问题是,2014年1月21日在之前的(错误的)比赛中开始。有没有一种简单的方法可以让匹配者寻找下一个匹配,而不是在之前的匹配结束后,而是在之前的匹配开始后的一个字符


共 (2) 个答案

  1. # 1 楼答案

    我希望这对你有帮助

    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");
            }
        }
    
  2. # 2 楼答案

    如果日期始终被圆点包围:

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