在给定以下模式的情况下提取resultCount的正确正则表达式是什么(注意我不关心字符串中的任何其他内容):
{
"resultCount":12,
"results": [blah blah..
这是我试过的正则表达式..但没有骰子(即不匹配..)..
.*resultCount":([\d]+),.*
语言是java;这有关系(事实证明正则表达式在香草正则表达式中运行良好)。所以我要看看像引号这样的字符是否是问题
答案 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));
}
Pattern
和Matcher
都是java.util.regex
的一部分。基于代码的on this tutorial page。
当然,在模式中包含\\s*
取决于您,但如果您不自行生成JSON,它肯定会发生,并且它不会造成任何伤害,因为没有与\\d
重叠。