0

を使用してページからいくつかnamevaluesタグを解析しています。しかし、私は必要なすべての値を返していません。以下はhtmlページのスニペットです-HTMLRegexregex

<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行目には、2つのinput nameタグがあります。そのため、これregexは2 番目のinput namePjbkAPkerを選択していません(これは出力にありません)。残りは問題ありません。
私も2番目を取得したいです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 に答える