簡體   English   中英

Java正則表達式匹配用冒號分隔的多個數字序列

[英]Java regex matching multiple digit sequences separated with colon

我有一個必須具有給定格式的字符串:

  • 至少ddd:dd
  • ddd:dd,ddd:dd
  • ddd:dd,ddd:dd,ddd:dd

看到JavaDoc ,我使用以下模式:

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

碼:

myString.matches("^[\\d{3}:\\d{2}]+[,\\d{3}:\\d{2}]{0,2}$")

它不起作用,但我認為沒有錯誤。

關於您的正則表達式要注意的一件事是,它與字符類( [...] ,我們在其中定義要匹配或不希望匹配的字符或符號范圍)而不是組( (...) ,我們只使用需要匹配的字符序列,或使用替代字符)。 在這里,您可以看到您的正則表達式實際匹配的內容

在此處輸入圖片說明

我確定{3}: a single character in the list {3}: literally這確實是您不想要的。

如果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());   
}

IDEONE演示

這是一個具有matches的示例

String pattern = "\\d{3}:\\d{2}(?:,\\d{3}:\\d{2})*";
System.out.println("222:22,222:22".matches(pattern));
System.out.println("111:11,222:22,222:22".matches(pattern));

正則表達式問題

  1. 您正在使用\\d匹配一個數字
  2. 您正在使用[]定義范圍

嘗試^(d{3}:d{2})(,d{3}:d{2}){0,2}$

  • [xyz] - []表示它與可以列出的任何一個字符匹配-因此xyz
  • (xyz)是一個群組,將匹配字符x y z

您需要以下正則表達式:

"^(\\d{3}:\\d{2}($|,(?!$)))+$"
  • ^匹配字符串的開頭。
  • \\\\d{3}:\\\\d{2}將與您的模式匹配; 緊隨其后
  • ($|,(?!$))將匹配字符串結尾$或逗號,但不匹配字符串結尾(?!$)
  • 前兩個表達式周圍的(...)+$將匹配您的模式的一個或多個(如果有多個,則必須用逗號分隔),然后是字符串的結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM