协助简单的正则表达式模式

时间:2013-04-24 23:03:49

标签: java regex

在给定以下模式的情况下提取resultCount的正确正则表达式是什么(注意我不关心字符串中的任何其他内容):

{
 "resultCount":12,
 "results": [blah blah..

这是我试过的正则表达式..但没有骰子(即不匹配..)..

.*resultCount":([\d]+),.*

语言是java;这有关系(事实证明正则表达式在香草正则表达式中运行良好)。所以我要看看像引号这样的字符是否是问题

1 个答案:

答案 0 :(得分:1)

我想你在Java中使用String.matches函数,它要求整个字符串与模式匹配(这就是你在模式之前和之后包含.*的原因)。正如Bergi发现的那样,.通常与换行符不匹配,因此如果不使用DOTALL,就无法获得全字符串匹配。

但这确实有点像黑客。您实际上并不想匹配整个字符串(这是您为验证所做的事情)。 Java提供了第二种模式匹配方法,它需要更多代码,但允许您正确地完成工作(查找子字符串匹配 - 如果需要,可以查找其中的多个)。这是一些带有固定模式的快速示例代码(假设str是您的输入字符串):

Pattern pattern = Pattern.compile("resultCount\":\\s*(\\d+)");

Matcher matcher = pattern.matcher(str);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

PatternMatcher都是java.util.regex的一部分。基于代码的on this tutorial page

Working demo.

当然,在模式中包含\\s*取决于您,但如果您不自行生成JSON,它肯定会发生,并且它不会造成任何伤害,因为没有与\\d重叠。