Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 带有html代码的多行正则表达式?_Java_Regex - Fatal编程技术网

Java 带有html代码的多行正则表达式?

Java 带有html代码的多行正则表达式?,java,regex,Java,Regex,如何使用正则表达式提取以下内容 String string = "<h1>1st header</h1>" + "<h2>second header</h2>" + "<p>some text</p>" + "<hr />"; Pattern p = Pattern.compile("</h1>(\\S+)<hr />", Pattern.MULTILINE); 输出为空,但原因是?正

如何使用正则表达式提取以下内容

String string = "<h1>1st header</h1>" + "<h2>second header</h2>" +
"<p>some text</p>" + "<hr />";

Pattern p = Pattern.compile("</h1>(\\S+)<hr />", Pattern.MULTILINE);

输出为空,但原因是?

正则表达式\S+与某些文本之间的空格不匹配。另外,.

输出为空,因为和之间的字符包含空格。您的\S+一旦遇到空格就会失败


如果将\\S+替换为,例如,.+,它应该捕获高度特定的示例字符串中的所有内容。但是,如果您希望正确地执行此操作,并且能够匹配不完全适合您的示例的任意HTML,请使用类似的HTML解析器。基于解析器的版本将简单、正确,而且不会

哦,天哪!我听到蹄声!尽管如果使用正则表达式真的符合您的目的,并且您对所使用的表达式非常小心,那么您不必像斗牛一样跳转到HTML解析器。@NeilCoffey,…您非常小心…,如果您控制正在解析的HTML。如果其他人控制了它,他们总是能够想出一个正则表达式无法匹配的合法标签。这是不使用正则表达式的主要原因。嗯,也许。。。如果您在一个环境中工作,有人出于某种原因故意试图破坏您的HTML解析,那么这显然与“按原样”解析某些HTML文档的情况不同。我并不反对在某些情况下使用正则表达式解析HTML时需要谨慎。但是,在某些情况下,正则表达式提供了一个简洁、有效的解决方案,如果在这种情况下选择简单的解决方案,就不必担心激怒HTML解析器之神。但是,是的,你需要意识到你所指出的问题。@NeilCoffey,这并不是要激怒任何人,甚至不是有人故意破坏东西。只是HTML是多种多样的,如果你想拼凑,你不能指望任何东西都是一致的。此外,现在基于DOM的解决方案非常容易实现,有了本答案中提到的好库。搞乱正则表达式太容易了。@NeilCoffey-你是对的,正则表达式可以是某些涉及HTML/XML的有限任务中最快、最简单的修复方法。我之所以催促解析器,是因为a他的示例输入提供了很少的线索来说明他将要使用什么,b我觉得他似乎在寻找一个健壮的解决方案。.+建议将与他的示例字符串一起使用,但解析器是安全的方法。