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
定义匹配组名。