2010年10月12日火曜日

Java 正規表現

忘備録

  * : 0回以上の繰り返し

  + : 1回以上の繰り返し

  ? : 0回 or 1回

  . : 任意の1文字

  ^ : 先頭

  $ : 終端

  [^] : 文字クラスの否定


・エスケープ文字

  \ * + . ? { } ( ) [ ] ^ $ - |


・エスケープ文字をパターン入れるときは、エスケープ処理が必要

  \\( \\{ \\$ \\|


・パターン文字列には、エスケープシーケンスをいれることが可能

\0n8 進値 0n を持つ文字 (0 <= n <= 7)
\0nn8 進値 0nn を持つ文字 (0 <= n <= 7)
\0mnn8 進値 0mnn を持つ文字 (0 <= m <= 3、0 <= n <= 7)
\xhh16 進値 0xhh を持つ文字
\uhhhh   16 進値 0xhhhh を持つ文字
\tタブ文字 ('\u0009')
\n改行文字 ('\u000A')
\rキャリッジリターン文字 ('\u000D')
\f用紙送り文字 ('\u000C')
\a警告 (ベル) 文字 ('\u0007')
\eエスケープ文字 ('\u001B')
\cxx に対応する制御文字





こんな感じで使う

  1. String in = "<input type=\"hidden"\ name=\"hoge1\" value=\"hogehoge11\">"  
  2.   +  "<input type=\"hidden"\ name=hoge2 value=hogehoge22>"  
  3.   +  "<input type=\"hidden"\ NAME=\"hoge3\" VALUE=\"hogehoge33\">";  
  4.   
  5.   
  6. int flags = Pattern.CASE_INSENSITIVE | Pattern.MULTILINE;  
  7. Pattern ptn = Pattern.compile("<input.* name=\"?([^\"]*)\"? value=\"?([^\"]*)\"?>", flags);  
  8.   
  9. Matcher mt = ptn.matcher(in);  
  10. while (mt.find()) {  
  11.     System.out.println(mt.groupCount());  
  12.     String name = mt.group(1);  
  13.     System.out.println(name);  
  14.     String value = mt.group(2);  
  15.     System.out.println(value);  
  16. }  


() で括った部分が mt.group(n) で取り出せる。
mt.group(0) には全体が入っていて、最初の () 部分は mt.group(1) に入る。


 

0 件のコメント:

コメントを投稿