1

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

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

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

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

语言是java;这确实很重要(结果是正则表达式在香草正则表达式中工作正常)。所以我要看看像引号这样的字符是否有问题

4

1 回答 1

1

我想您正在使用String.matchesJava 中的函数,该函数需要整个字符串与模式匹配(这就是您.*在模式之前和之后包含的原因)。正如 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。基于本教程页面的代码。

工作演示。

当然,\\s*模式中包含的内容取决于您,但如果您自己不生成 JSON,这绝对是可能发生的事情,而且它不会造成任何伤害,因为与\\d.

于 2013-04-24T23:25:53.373 回答