正则表达式匹配重复模式

时间:2012-10-29 01:16:36

标签: java regex

我正在尝试为java编写一个匹配以下字符串的正则表达式:

数字,数字,数字(它可能是这么简单,也可能有不同数量的数字,但每个数字后面都必须有逗号,但不会有任何空格)

这是我的尝试:

[[0-9],[0-9]]+

但它似乎匹配任何带有数字的东西

5 个答案:

答案 0 :(得分:3)

您可以尝试([0-9]+,)*[0-9]+

的内容

这将匹配:

  • 只有一个数字,例如:7
  • 两个数字,例如:7,52
  • 三个数字,例如:7,52,999

这不匹配:

  • 有空格的东西,例如:7, 52
  • 以逗号结尾的列表,例如:7, 52,
  • 许多其他问题超出了这个问题的范围。

答案 1 :(得分:1)

我认为这会起作用

\d+,(\d+,)+

请注意,如您所愿,只会捕获数字后跟逗号

答案 2 :(得分:1)

我猜你是从一个字符串开始的。你为什么不用String.split(",")

答案 3 :(得分:0)

^表示字符串的开头,$表示结束。如果你不使用它们,你可以匹配中间的东西(b匹配的“abc”)。

+适用于之前的元素。 b是一个元素,[0-9]是一个元素,所以是组(用括号括起来的东西)。

所以,你想要的正则表达式匹配:

  • 字符串^
  • 的开头
  • 一个号码[0-9]
  • 以数字(,[0-9])+
  • 为流的任何数量的逗号
  • 字符串$
  • 的结尾

或,^[0-9](,[0-9])+$

答案 4 :(得分:0)

尝试将正则表达式[\d,]*字符串表示为[\\d,]*,例如下面:

   Pattern p4 = Pattern.compile("[\\d,]*");
   Matcher m4 = p4.matcher("12,1212,1212ad,v");
   System.out.println(m4.find()); //prints true
   System.out.println(m4.group());//prints 12,1212,1212

如果您想匹配最少一个逗号(,)和两个数字,例如12,1212然后您可能希望将正则表达式用作 (\d+,)+\d+ ,字符串表示为\\d+,)+\\d+。此正则表达式匹配一个区域,该区域的数字最少为一位,后跟一个逗号(,),后跟最小一位数。