给定以下模式,提取 resultCount 的正确正则表达式是什么(注意我不关心字符串中的其他任何内容):
{
"resultCount":12,
"results": [blah blah..
这是我尝试过的正则表达式..但没有骰子(即不匹配..)..
.*resultCount":([\d]+),.*
语言是java;这确实很重要(结果是正则表达式在香草正则表达式中工作正常)。所以我要看看像引号这样的字符是否有问题
我想您正在使用String.matches
Java 中的函数,该函数需要整个字符串与模式匹配(这就是您.*
在模式之前和之后包含的原因)。正如 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
.