此正则表达式捕捉你"INeedThis"
:
(?:.*href="[^"]*")*.*href="([^"]*)"(?=.*keyword)
如果输入字符串可以包含换行符,因为它似乎是这样,那么你必须确保启用DOTALL
选项。
String input =
"href=\"something \">\n"
+ "href=\"something else\">\n"
+ "href=\"INeedThis\">\n"
+ "keyword\n"
+ "href=\"something else\">";
Pattern myPattern = Pattern.compile(
"(?:.*href=\"[^\"]*\")*.*href=\"([^\"]*)\"(?=.*keyword)",
Pattern.DOTALL);
Matcher m = myPattern.matcher(input);
if (m.lookingAt()) { // or maybe m.find(), but not m.matches()
System.out.println(m.group(1));
} else {
System.out.println("no match");
}
输出:
INeedThis
注意,这是敏感的,其报价的风格在href属性使用(这是你的),并且它不围绕容纳空白=
(和你一样)。
这也是一个比你更普遍的模式。因此,它适用于从所描述的表单的输入中提取所需的数据,但它适用于同时验证输入确实具有该表单的形式,但它不是而是。
此外,如果关键字可能出现不止一次,那么这种格局将选择关键字的最后一个出场,之后较早关键字的出现可能发生之前出现的最后候选串。
你能更清楚一点你想匹配什么吗? –
评论晚了点,但是,我需要“”之间的一切。基本上文字INeedThis –