不能解释为什么我的Java正则表达不起作用

时间:2017-08-11 09:33:53

标签: java regex

我试图在我提取的网页上找到文字,这些文字介于&{39; align="left">\n&#34;和&#39; </form>\n</td>&#39;子串。

我写了一个正则表达式:

(align=\"left\">\\n)(?<part>.*?)(<\/form>\\n<\/td>)

并在https://www.freeformatter.com/java-regex-tester.html进行了测试,并按照我的需要进行测试。

但是在Java代码中它无法找到任何东西。

我尝试使用的测试代码:

String frontPage = "<html>\n<head>\n<title>Hello</title>\n</head>\n" + 
            "<body>\n<table>\n<tr align=\"left\">\n" + 
            "<td>Hello \n<form>\n<input type=\"submit\" value=\"ok\">\n" + 
            "</form>\n</td>\n" + 
            "<td>World \n<form>\n<input type=\"submit\" value=\"ok\">\n" + 
            "</form>\n</td>\n" + 
            "</tr>\n</table>\n</body>\n</html>";

java.util.regex.Pattern p =
                java.util.regex.Pattern.compile(
                        "(align=\"left\">\\n)(?<part>.*?)(<\\/form>\\n<\\/td>)");
java.util.regex.Matcher m = p.matcher(frontPage);

List<String> parts = new ArrayList<>();
while (m.find()) {
    parts.add(m.group("part")); 
}
if (parts.size() == 0)
    System.out.println("No page parts found");
else {
    System.out.println("Something matches at least");
}

如果只指定了前两个组,它会找到匹配项,但是当我向最后一个组添加至少简单的(form)序列时,它会停止匹配任何内容,我甚至无法猜到原因。

1 个答案:

答案 0 :(得分:4)

DOTALL添加到compile。像

java.util.regex.Pattern.compile(
        "(align=\"left\">\\n)(?<part>.*?)(<\\/form>\\n<\\/td>)",
        java.util.regex.Pattern.DOTALL
);

See it here at ideone