0

我正在使用. name_ 但是我没有返回所有必需的值。下面是html页面的片段-valuesHTMLRegexregex

<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]

在第 4 行HTML内容中,它有两个input name标签,因此,这regex没有选择第二个 input name是 PjbkAPker (输出中缺少这个)。其余的都很好。
我也想要第二个input name

4

1 回答 1

2

用正则表达式解析 X/HTML 是个坏主意TM

尝试使用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();
}
于 2013-02-12T20:11:16.730 回答