用于解析一些html名称和值属性的正则表达式

时间:2013-02-12 19:20:07

标签: java regex

我正在使用namevalues页面解析一些HTMLRegex代码。但是我的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

1 个答案:

答案 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();
}