正则表达式匹配用多个逗号分隔的数字

时间:2015-12-02 04:18:55

标签: java regex

我正致力于使用正则表达式识别模式。

我的用例是找到以下格式的字符串

100,253,2586,3654

以下是我尝试的内容

(\d+\,+\d+\,*)+

但它似乎无法正常工作。

帮我解决问题。

进一步评论:
模式应该识别

1. Any combination of numbers separated by a comma  (eg: 123,465,798)  
2. shouldn't begin or end with comma (eg: ,123,46 )  
3. Decimals (eg: 123,465.2324)

5 个答案:

答案 0 :(得分:1)

尝试这样的事情:

public static void main(String[] args) {
    String s = "100,253,2586,3654";
    System.out.println(s.matches("((?<!^,)\\d+(,(?!$)|$))+"));
}

编辑:正则表达式解释。

((?<!^,)\\d+(,(?!$)|$))+") ==&gt;

  

\\d+ ==&gt;匹配一个或多个数字。

     

(?<!^,) ==&gt;消极的后视。检查字符串是否不以&#34;,&#34;开头。

     

(,(?!$)|$))+") ==&gt;检查   数字是 - 后面跟一个逗号而不是后跟结尾   字符串OR后跟String的结尾。

这将

  
      
  1. 在开头预防逗号。
  2.   
  3. 最后阻止逗号。
  4.   
  5. 多个逗号
  6.   

答案 1 :(得分:1)

这应该与您想要获取的数字相匹配。请注意,它允许使用尾随小数点,因为您没有指定任何有关该考虑的内容:

<?php



     if (isset($_POST['detail'])) {
            session_start();
            echo $_POST['detailCart'][0];
             echo $_POST['detailCart'][1];
              echo $_POST['detailCart'][2];


        }
    ?>

也许您需要一些外观来保证匹配既不会先于也不会跟随您将使匹配无效的任何字符。但是,在典型的文本正文中,你不能在一个数字之后立即使用句号或逗号作为常规标点符号吗?

答案 2 :(得分:0)

^\d+(?:,\d+)*$

这应该为你做。你的正则表达式只会与123不匹配。如果不是这种情况,请使用

^\d+(?:,\d+)+$

答案 3 :(得分:0)

使用此正则表达式:

[^\,](\d+\.?,?)+[^\,]$

这适用于您的特定情况

答案 4 :(得分:0)

当我尝试匹配其他字母字符串中的数字时,我很难获得@TheLostMind的答案。我最终选择了:

 \d+(,\d+)*(\.\d+)?

((需要转义那些反斜线以用于您的模式字符串,即\\d+(,\\d+)*(\\.\\d+)?

注意:这并不能完全回答OP,因为它不会直接检查前导或尾随逗号,但是如果数字确实有,则不会从中取出CharSequence。

说明:

\d+匹配一个或多个数字

(,\d+)*匹配零个或多个“逗号后跟一个或多个数字”的组

(\.\d+)?匹配零个或一组小数点,后跟一个或多个数字

Pattern pattern = Pattern.compile("\\d+(,\\d+)*(\\.\\d+)?");
Matcher m1 = pattern.matcher("100,253,2586,3654");
Matcher m2 = pattern.matcher("100,253,2586,3654.999");
Matcher m3 = pattern.matcher("10,000,000,253,023,253,365,2536,2563,253");
Matcher m4 = pattern.matcher("10,000,456,258.99");
Matcher m5 = pattern.matcher("10.99");
Matcher m6 = pattern.matcher("1");
Matcher m7 = pattern.matcher("Text on the left 100,253,2586,3654.00000 text on the right");
Matcher m8 = pattern.matcher("Text on the left ,100,253,2586,3654.00000, text on the right");

System.out.println("Matcher 1 matches " + m1.find() + " result: " + m1.group());
System.out.println("Matcher 2 matches " + m2.find() + " result: " + m2.group());
System.out.println("Matcher 3 matches " + m3.find() + " result: " + m3.group());
System.out.println("Matcher 4 matches " + m4.find() + " result: " + m4.group());
System.out.println("Matcher 5 matches " + m5.find() + " result: " + m5.group());
System.out.println("Matcher 6 matches " + m6.find() + " result: " + m6.group());
System.out.println("Matcher 7 matches " + m7.find() + " result: " + m7.group());
System.out.println("Matcher 8 matches " + m8.find() + " result: " + m8.group());

打印:

Matcher 1 matches true result: 100,253,2586,3654
Matcher 2 matches true result: 100,253,2586,3654.999
Matcher 3 matches true result: 10,000,000,253,023,253,365,2536,2563,253
Matcher 4 matches true result: 10,000,456,258.99
Matcher 5 matches true result: 10.99
Matcher 6 matches true result: 1
Matcher 7 matches true result: 100,253,2586,3654.00000
Matcher 8 matches true result: 100,253,2586,3654.00000