* : 0回以上の繰り返し
+ : 1回以上の繰り返し
? : 0回 or 1回
. : 任意の1文字
^ : 先頭
$ : 終端
[^] : 文字クラスの否定
・エスケープ文字
\ * + . ? { } ( ) [ ] ^ $ - |
・エスケープ文字をパターン入れるときは、エスケープ処理が必要
\\( \\{ \\$ \\|
・パターン文字列には、エスケープシーケンスをいれることが可能
\0n | 8 進値 0n を持つ文字 (0 <= n <= 7) |
\0nn | 8 進値 0nn を持つ文字 (0 <= n <= 7) |
\0mnn | 8 進値 0mnn を持つ文字 (0 <= m <= 3、0 <= n <= 7) |
\xhh | 16 進値 0xhh を持つ文字 |
\uhhhh | 16 進値 0xhhhh を持つ文字 |
\t | タブ文字 ('\u0009') |
\n | 改行文字 ('\u000A') |
\r | キャリッジリターン文字 ('\u000D') |
\f | 用紙送り文字 ('\u000C') |
\a | 警告 (ベル) 文字 ('\u0007') |
\e | エスケープ文字 ('\u001B') |
\cx | x に対応する制御文字 |
こんな感じで使う
String in = "<input type=\"hidden"\ name=\"hoge1\" value=\"hogehoge11\">"
+ "<input type=\"hidden"\ name=hoge2 value=hogehoge22>"
+ "<input type=\"hidden"\ NAME=\"hoge3\" VALUE=\"hogehoge33\">";
int flags = Pattern.CASE_INSENSITIVE | Pattern.MULTILINE;
Pattern ptn = Pattern.compile("<input.* name=\"?([^\"]*)\"? value=\"?([^\"]*)\"?>", flags);
Matcher mt = ptn.matcher(in);
while (mt.find()) {
System.out.println(mt.groupCount());
String name = mt.group(1);
System.out.println(name);
String value = mt.group(2);
System.out.println(value);
}
() で括った部分が mt.group(n) で取り出せる。
mt.group(0) には全体が入っていて、最初の () 部分は mt.group(1) に入る。
0 件のコメント:
コメントを投稿