Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于简单正则表达式模式的帮助_Java_Regex - Fatal编程技术网

Java 关于简单正则表达式模式的帮助

Java 关于简单正则表达式模式的帮助,java,regex,Java,Regex,给定以下模式,提取resultCount的正确正则表达式是什么(注意,我不关心字符串中的任何其他内容): 这是我试过的正则表达式。。但是没有骰子(也就是说,没有对手…) 语言是java;这确实很重要(事实证明正则表达式在香草正则表达式中工作得很好)。因此,我要看看是否有类似引号的字符是问题所在我想您使用的是Java中的String.matches函数,它要求整个字符串与模式匹配(这就是为什么在模式之前和之后包含*)。正如Bergi正确指出的那样,通常与换行符不匹配,因此如果不使用DOTALL,就

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

这是我试过的正则表达式。。但是没有骰子(也就是说,没有对手…)


语言是java;这确实很重要(事实证明正则表达式在香草正则表达式中工作得很好)。因此,我要看看是否有类似引号的字符是问题所在

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

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

Pattern
Matcher
都是
java.util.regex
的一部分。基于代码的


当然,模式中是否包含
\\s*
取决于您,但如果您不自己生成JSON,肯定会发生这种情况,而且不会造成任何伤害,由于与
\\d

没有重叠,我想您使用的是Java中的
String.matches
函数,它要求整个字符串与模式匹配(这就是为什么在模式前后都包含
*
)。正如Bergi正确指出的那样,
通常与换行符不匹配,因此如果不使用
DOTALL
,就无法获得完整的字符串匹配

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

Pattern
Matcher
都是
java.util.regex
的一部分。基于代码的


当然,模式中是否包含
\\s*
取决于您,但如果您不自己生成JSON,肯定会发生这种情况,而且不会造成任何伤害,因为与
\\d

没有重叠,看起来也不会太错,尽管方括号不是必需的。但有两件事:你用哪种语言?您的输入看起来很像JSON。使用JSON解析器不是更容易/更可靠/更易读吗?为什么不忘记那些
*
(或者您的正则表达式是否锚定到字符串的开始和结束)?在某些regexp风格中,圆点甚至可能与linebreak不匹配…@buettner。是的,关于语言的重要性,您是对的:这个正则表达式可以很好地工作,但在java中不行。我不希望在此上下文中使用完整的json解析器。@Bergi:您也在正确的轨道上。答案是添加DOTALL,@javadba正确的解决方案是删除
*
(以及后面的逗号,如果您愿意的话)并使用
find
而不是
matches
(因为前者不需要匹配整个字符串。虽然方括号不是必需的,但这看起来并没有太大的错误。但有两件事:您在使用哪种语言?您的输入看起来像JSON。使用JSON解析器不是更容易/更可靠/更可读吗?为什么不忘记那些
*(或者正则表达式是否锚定到字符串开始和结束)?在某些regexp风格中,点甚至可能与换行符不匹配…@buettner。是的,关于语言的重要性,你是对的:这个regex可以很好地工作,但不是在java中。我不希望在这种上下文中使用完整的json解析器。@Bergi:你也走对了。答案是添加点,正确的解决方案是删除这两个
*
(如果您愿意,还可以使用后面的逗号)并使用
find
而不是
matches
(因为前者不需要匹配整个字符串。您好,我实际上有两个用例(match和find)并且已经在我的正则表达式utils中使用了这两个代码片段。但是我会继续并将您的响应标记为已接受。嗨,实际上我有两个用例(匹配和查找),并且已经在我的正则表达式utils中使用了这两个代码片段。但是我会继续并将您的响应标记为已接受。
{
 "resultCount":12,
 "results": [blah blah..
.*resultCount":([\d]+),.*
Pattern pattern = Pattern.compile("resultCount\":\\s*(\\d+)");

Matcher matcher = pattern.matcher(str);

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