Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式匹配用冒号分隔的多个数字序列_Java_Regex - Fatal编程技术网

Java正则表达式匹配用冒号分隔的多个数字序列

Java正则表达式匹配用冒号分隔的多个数字序列,java,regex,Java,Regex,我有一个字符串必须具有给定的格式: 至少ddd:dd 或ddd:dd,ddd:dd 或ddd:dd,ddd:dd,ddd:dd 看到, 我使用这种模式: "^[\\d{3}:\\d{2}]+[,\\d{3}:\\d{2}]*$" 代码: 它不起作用,但我看不出有错。您的正则表达式有问题 您正在使用与数字匹配的\d 您正在使用用于定义范围的[] 请尝试使用正则表达式解决^(d{3}:d{2})(,d{3}:d{2}){0,2}$问题 您正在使用与数字匹配的\d 您正在使用用于定义范围的[]

我有一个字符串必须具有给定的格式:

  • 至少
    ddd:dd
  • ddd:dd,ddd:dd
  • ddd:dd,ddd:dd,ddd:dd
看到, 我使用这种模式:

"^[\\d{3}:\\d{2}]+[,\\d{3}:\\d{2}]*$"
代码:


它不起作用,但我看不出有错。

您的正则表达式有问题

  • 您正在使用与数字匹配的
    \d
  • 您正在使用用于定义范围的
    []

  • 请尝试使用正则表达式解决
    ^(d{3}:d{2})(,d{3}:d{2}){0,2}$

    问题

  • 您正在使用与数字匹配的
    \d
  • 您正在使用用于定义范围的
    []

  • 请尝试
    ^(d{3}:d{2})(,d{3}:d{2}){0,2}$

    关于正则表达式,需要注意的一点是,它在字符类(
    […]
    )而不是组(
    […])中存在一个关键问题,我们在字符类中定义了想要匹配或不想要匹配的字符或符号范围
    我们只使用需要匹配的字符序列,或使用替换字符。):

    我确信
    {3}:列表中的单个字符{3}:字面上看
    确实是您不想要的

    如果
    d
    代表任何数字,则需要使用类似

    String pattern = "\\d{3}:\\d{2}(?:,\\d{3}:\\d{2})*";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher("111:11,222:22,222:22");
    
    while (m.find()) {
           System.out.println(m.group());   
    }
    

    这是:


    关于您的正则表达式,需要注意的一点是,它在字符类(
    […]
    ,其中我们定义了要匹配或不想匹配的字符或符号范围)而不是一个组(
    (…)
    ,其中我们只使用需要匹配的字符序列,或使用替代项)方面存在一个关键问题:

    我确信
    {3}:列表中的单个字符{3}:字面上看
    确实是您不想要的

    如果
    d
    代表任何数字,则需要使用类似

    String pattern = "\\d{3}:\\d{2}(?:,\\d{3}:\\d{2})*";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher("111:11,222:22,222:22");
    
    while (m.find()) {
           System.out.println(m.group());   
    }
    

    这是:

    • [xyz]
      []
      表示它匹配一个字符,该字符可以是列出的任何字符,因此
      x
      y
      z
    • (xyz)
      是一个组,将匹配字符
      x
      然后
      y
      然后
      z
    您需要以下正则表达式:

    "^(\\d{3}:\\d{2}($|,(?!$)))+$"
    
    • ^
      匹配字符串的开头
    • \\d{3}:\\d{2}
      将匹配您的模式;紧接着
    • ($|,(?!$)
      将匹配字符串
      $
      的结尾,或者匹配未后跟字符串
      (?!$)
      结尾的逗号
    • 前后两个表达式将匹配一个或多个模式(如果有多个模式,则必须用逗号分隔),然后匹配字符串的结尾
        • [xyz]
          []
          表示它匹配一个字符,该字符可以是列出的任何字符,因此
          x
          y
          z
        • (xyz)
          是一个组,将匹配字符
          x
          然后
          y
          然后
          z
        您需要以下正则表达式:

        "^(\\d{3}:\\d{2}($|,(?!$)))+$"
        
        • ^
          匹配字符串的开头
        • \\d{3}:\\d{2}
          将匹配您的模式;紧接着
        • ($|,(?!$)
          将匹配字符串
          $
          的结尾,或者匹配未后跟字符串
          (?!$)
          结尾的逗号
        • 前后两个表达式将匹配一个或多个模式(如果有多个模式,则必须用逗号分隔),然后匹配字符串的结尾

        什么是
        d
        ?字符文字还是数字的占位符?什么是
        d
        ?字符文字或数字占位符?如果您认为这是您需要的,请告诉我,我将添加解释。如果您认为这是您需要的,请告诉我,我将添加解释。