如何构建一个正则表达式以匹配这些“long”值?

时间:2013-06-27 16:02:00

标签: java regex

如何在Java中为长数据类型构建正则表达式,我目前有3个双精度值的正则表达式作为我的模式:

String pattern = "(max=[0-9]+\\.?[0-9]*) *(total=[0-9]+\\.?[0-9]*) *(free=[0-9]+\\.?[0-9]*)";

我正在使用以下行构建模式:

Pattern a = Pattern.compile("control.avgo:", Pattern.CASE_INSENSITIVE);

我想在文件control.avgo中匹配下面示例文本中等号后面的数字。

max=259522560, total=39325696, free=17979640

我需要做些什么才能纠正我的代码以匹配它们?

3 个答案:

答案 0 :(得分:3)

可能是你真的需要

Pattern a = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

而不是

Pattern a = Pattern.compile("control.avgo:", Pattern.CASE_INSENSITIVE);

因为您当前的代码使用"control.avgo:"作为正则表达式,而不是您定义的pattern

答案 1 :(得分:2)

您需要解决几个错误,包括:

  • 您的模式指定实数,但您的问题要求长整数。
  • 您的模式忽略了被搜索字符串中的逗号。
  • Pattern.compile()的第一个参数是正则表达式,而不是被搜索的字符串。

这将有效:

    String sPattern = "max=([0-9]+), total=([0-9]+), free=([0-9]+)";
    Pattern pattern = Pattern.compile( sPattern, Pattern.CASE_INSENSITIVE );

    String source = "control.avgo: max=259522560, total=39325696, free=17979640";
    Matcher matcher = pattern.matcher( source );
    if ( matcher.find()) {
        System.out.println("max=" + matcher.group(1));
        System.out.println("total=" + matcher.group(2));
        System.out.println("free=" + matcher.group(3));
    }

如果要将找到的数字转换为数字类型,请使用Long.valueOf( String )

答案 2 :(得分:2)

如果您只需要找到前面带有“=”...

的任何数字
String test = "3.control.avgo: max=259522560, total=39325696, free=17979640";
// looks for the "=" sign preceding any numerical sequence of any length
Pattern pattern = Pattern.compile("(?<=\\=)\\d+");
Matcher matcher = pattern.matcher(test);
// keeps on searching until cannot find anymore
while (matcher.find()) {
    // prints out whatever found
    System.out.println(matcher.group());
}

输出:

259522560
39325696
17979640