[英]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());
}
這是一個具有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));
正則表達式問題
\\d
匹配一個數字 []
定義范圍 嘗試^(d{3}:d{2})(,d{3}:d{2}){0,2}$
[xyz]
- []
表示它與可以列出的任何一個字符匹配-因此x
或y
或z
。 (xyz)
是一個群組,將匹配字符x
y
z
。 您需要以下正則表達式:
"^(\\d{3}:\\d{2}($|,(?!$)))+$"
^
匹配字符串的開頭。 \\\\d{3}:\\\\d{2}
將與您的模式匹配; 緊隨其后 ($|,(?!$))
將匹配字符串結尾$
或逗號,
但不匹配字符串結尾(?!$)
。 (...)+$
將匹配您的模式的一個或多個(如果有多個,則必須用逗號分隔),然后是字符串的結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.