我正在使用name
从values
页面解析一些HTML
和Regex
代码。但是我的regex
没有返回所有必需的值。以下是html页面的片段 -
<input style="display: none;" name="hiddenAction" value="myval" type="hidden">
<input name="ml_uiss" id="ml_uiss" value="aba972kd82lw" type="hidden">
<input style="display: none;" name="Key" id="Key" value="56n8f48jfn98cwnc38c398nc83nx2b9c32n.an24" type="text">
<input name="AvKbkGPQr" class="iswickEnabled input" maxlength="10" id="AvKbkGPQr" onkeyup="javascript:checkIt(this);" onkeydown="javascript:checkIt(this);" onchange="javascript:checkIt(this);" value="1234567890" onfocus="this.value='';" type="text"> <input name="PjbkAPker" class="iswickEnabled input" maxlength="10" id="PjbkAPker" onkeyup="javascript:checkIt(this);" onkeydown="javascript:checkIt(this);" onchange="javascript:checkIt(this);" type="text">
<input id="timeCheck" name="timeCheck" value="23:38:20" type="hidden">
<input name="isDone" id="isDone" value="prq" type="hidden">
以下是regex
-
String reg = "<input.*name=['\"](\\w+)['\"].*\\svalue=['\"]([\\w:.\\s]+)['\"].*(<input name=\"(\\w+)\")?";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(myString);
while (m.find()) {
String match1 = m.group(1);
String match2 = m.group(2);
String match3 = m.group(3);
String match4 = m.group(4);
System.out.println("[" + match1 + "][" + match2 + "][" + match3+ "][" + match4 + "]");
}
输出低于 -
[hiddenAction][myval][null][null]
[ml_uiss][aba972kd82lw][null][null]
[Key][56n8f48jfn98cwnc38c398nc83nx2b9c32n.an24][null][null]
[AvKbkGPQr][1234567890][null][null]
[timeCheck][23:38:20][null][null]
[isDone][prq][null][null]
在HTML
内容的第4行,它有两个input name
标记,因此,此regex
未选择第二个input name
,即PjbkAPker(这在输出中缺失)。其余的事情很好。
我想得到第二个input name
。
答案 0 :(得分:2)
Parsing X/HTML with regular expressions is a bad ideaTM
请尝试使用jsoup:
Document doc = Jsoup.parseBodyFragment(htmlString);
Elements inputs = doc.select("input");
for (Element el : inputs) {
Attributes attrs = el.attributes();
System.out.print("ELEMENT: " + el.tagName());
for (Attribute attr : attrs) {
System.out.print(" " + attr.getKey() + "=" + attr.getValue());
}
System.out.println();
}