Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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
Can';我不明白为什么我的Java正则表达式不';行不通_Java_Regex - Fatal编程技术网

Can';我不明白为什么我的Java正则表达式不';行不通

Can';我不明白为什么我的Java正则表达式不';行不通,java,regex,Java,Regex,我试图在我获取的网页上找到位于“align=“left”>\n”和“\n”子字符串之间的文本片段 我写了一个正则表达式: (align=\"left\">\\n)(?<part>.*?)(<\/form>\\n<\/td>) (align=\“left\”>\\n)(?*?)(\\n) 并在我需要的地方测试了它 但是在Java代码中它找不到任何东西 我正在尝试使用的测试代码: String frontPage = "<html>\n<

我试图在我获取的网页上找到位于“
align=“left”>\n
”和“
\n
”子字符串之间的文本片段

我写了一个正则表达式:

(align=\"left\">\\n)(?<part>.*?)(<\/form>\\n<\/td>)
(align=\“left\”>\\n)(?*?)(\\n)
并在我需要的地方测试了它

但是在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");
}
String frontPage=“\n\nHello\n\n”+
“\n\n\n”+
“你好\n\n\n”+
“\n\n”+
“世界\n\n\n”+
“\n\n”+
“\n\n\n”;
java.util.regex.Pattern p=
java.util.regex.Pattern.compile(
“(align=\“left\”>\\n)(?*?)(\\n)”;
java.util.regex.Matcher m=p.Matcher(frontPage);
列表部件=新的ArrayList();
while(m.find()){
部分。添加(m.group(“部分”));
}
如果(parts.size()==0)
System.out.println(“未找到页面部件”);
否则{
System.out.println(“至少有匹配项”);
}

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

DOTALL
添加到
编译

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

.

related:为什么中间组以问号开始?@JFMeier它定义了组名,所以我不需要考虑组索引。@MauricePerry它以问号结束,以使*选择器不贪婪。否则它将只返回一个匹配项,而不是我需要的两个匹配项。@UsagiMiyamoto
定义匹配组名。