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
?字符文字或数字占位符?如果您认为这是您需要的,请告诉我,我将添加解释。如果您认为这是您需要的,请告诉我,我将添加解释。