JAVA開発メモ
正規表現 のバックアップソース(No.2)
 

[トップ|一覧|単語検索|最終更新|バックアップ|ヘルプ]

*java.util.regex パッケージ
javaはバージョン1.4から正規表現をサポートしています。

**メタ文字
***文字の表現
|CENTER:''構文''|CENTER:''マッチ対象''|
|x |文字 x |
|\\ |バックスラッシュ文字 |
|\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 を持つUnicode文字 |
|\t |タブ文字 ('\u0009') |
|\n |改行文字 ('\u000A') |
|\r |キャリッジリターン文字 ('\u000D') |
|\f |用紙送り文字 ('\u000C') |
|\a |警告 (ベル) 文字 ('\u0007') |
|\e |エスケープ文字 ('\u001B') |
|\cx |x に対応する制御文字 |

***文字クラスと定義済み文字クラス
|CENTER:''構文''|CENTER:''マッチ対象''|
|[abc] |a、b、または c (単純クラス) |
|[^abc] |a、b、c 以外の文字 (否定) |
|[a-zA-Z] |a 〜 z または A 〜 Z (範囲) |
|[a-d[m-p]] |a 〜 d、または m 〜 p: [a-dm-p] (結合) |
|[a-z&&[def]] |d、e、f (交差) |
|[a-z&&[^bc]] |b と c を除く a 〜 z: [ad-z] (減算) |
|[a-z&&[^m-p]] |m 〜 p を除く a 〜 z: [a-lq-z] (減算) |
|. |任意の文字 (行末記号とマッチする場合もある) |
|\d |数字: [0-9] |
|\D |数字以外: [^0-9] |
|\s |空白文字: [ \t\n\x0B\f\r] |
|\S |非空白文字: [^\s] |
|\w |単語構成文字: [a-zA-Z_0-9] |
|\W |非単語文字: [^\w] |
|\p{prop} |POSIX文字クラス、Unicodeのプロパティ、スクリプト、ブロックに属する文字 |
|\P{prop} |POSIX文字クラス、Unicodeのプロパティ、スクリプト、ブロックに属さない文字(否定)|

***境界正規表現エンジン
|CENTER:''構文''|CENTER:''マッチ対象''|
|^ |行の先頭 |
|$ |行の末尾 |
|\b |単語境界 |
|\B |非単語境界 |
|\A |入力の先頭 |
|\G |前回のマッチの末尾 |
|\Z |最後の行末記号がある場合は、それを除く入力の末尾 |
|\z |入力の末尾 |

***グループ化、キャプチャ、条件式、制御式
|CENTER:''構文''|CENTER:''マッチ対象''|
|(X) |X、前方参照を行う正規表現グループ |
|\n |マッチした n 番目の前方参照を行う正規表現グループ |
|(?:X) |X、前方参照を行わない正規表現グループ |
|(?idmsux-idmsux)  |正規表現ではないが、マッチフラグのオン/オフを切り替える |
|(?idmsux-idmsux:X)   |X、指定されたフラグをオン/オフにした前方参照を行わない正規表現グループ |
|(?=X) |X、幅ゼロの肯定先読み |
|(?!X) |X、幅ゼロの否定先読み |
|(?<=X) |X、幅ゼロの肯定後読み |
|(?<!X) |X、幅ゼロの否定後読み |
|(?>X) |X、独立した前方参照を行わない正規表現グループ |
|XY |X の直後に Y |
|X|Y |X または Y |
|X? |X、1回または0回 |
|X* |X、0回以上の繰り返し |
|X+ |X、1回以上の繰り返し |
|X{n} |X、ちょうどn回 |
|X(n,} |X、n回以上 |
|X{n,m} |X、n回以上、m回以下 |
|X?? |X、1回または 0回の少ない回数 |
|X*? |X、0回以上できるだけ少ない回数繰り返す |
|X+? |X、1回以上できるだけ少ない回数繰り返す |
|X{n}? |X、n回 |
|X(n,}? |X、少なくともn回以上で、なるべく少ない回数だけ |
|X{n,m}? |X、n回以上、m回以下で、なるべく少ない回数だけ |
|X?+ |X、1または0回でバックトラックしない |
|X*+ |X、0回以上でバックトラックしない |
|X++ |X、1回以上でバックトラックしない |
|X{n}+ |X、n回でバックトラックしない |
|X(n,}+ |X、n回以上でバックトラックしない |
|X{n,m}+ |X、n回以上、m回以下でバックトラックしない |

**オプション
|Pattern.CANON_EQ|標準等価を有効にします。
|Pattern.CASE_INSENSITIVE|大文字と小文字を区別しないマッチングを有効にします。|
|Pattern.COMMENTS|パターン内で空白とコメントを使用できるようにします。 |
|Pattern.DOTALL|DOTALL モードを有効にします。 |
|Pattern.MULTILINE|複数行モードを有効にします。 |
|Pattern.UNICODE_CASE|Unicode に準拠した大文字と小文字を区別しないマッチングを有効にします。|
|Pattern.UNIX_LINES|Unix ラインモードを有効にします。|

**サンプル
***マッチング
 String text = "Hello World!";
 Pattern p = Pattern.compile("Hello");
 Matcher m = p.matcher(text);
 if (m.find()) {
     System.out.println("textにHelloはある");
 } else {
     System.out.println("textにHelloはない");
 }

***置換
一括置換を行う場合は、m.replaceAll(".info")となる。
 String text = "www.hoge.net";
 Pattern p = Pattern.compile("\\.net");
 Matcher m = p.matcher(text);
 String replaced = m.replaceFirst(".info");
 System.out.println(replaced);

***キャプチャ
キャプチャ用の括弧順にm.group(1)、m.group(2)…からアクセスできる。
 String text = "Name: Regular Expressions";
 Pattern p = Pattern.compile("^(\\w+):\\s+(.+)$");
 Matcher m = p.matcher(text);
 if (m.find()) {
     String key = m.group(1); // key = "Name";
     String value = m.group(2); // value = "Regular Expressions";
     System.out.println("key   = " + key);
     System.out.println("value = " + value);
 }

***キャプチャの置換
キャプチャ用の括弧順に$1、$2…と指定できる。
 String text = "<a href=\"http://www.hoge.net/\">HOGE</a>";
 String replaced = text.replaceFirst("<a href=\"(.+?)\">(.+?)</a>",
                                     "$2 のURLは $1)");
 System.out.println(replaced);

***文字種ごとの抽出
 String text = "ABCひらがなカタカナ漢字の抽出";
 Pattern p = Pattern.compile("(\\p{InBasicLatin}+|"
         + " \\p{InHiragana}+|" + " \\p{InKatakana}+|"
         + " \\p{InCJKUnifiedIdeographs}+)", Pattern.COMMENTS);
 Matcher m = p.matcher(text);
 while (m.find()) {
     String chunk = m.group(1);
     System.out.println(chunk);
 }

***Stringクラスの例
タグを取り除きます。
 String text = "<font size=-2>HTMLの<strong>タグ</strong>を外す</font>";
 String replaced = text.replaceAll("<.+?>", "");
 System.out.println(replaced);

トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Modified by MT22(Moriwaki Takashi)

"PukiWiki" 1.3.7 Copyright © 2001,2002,2003 PukiWiki Developers Team. License is GNU/GPL.
Based on "PukiWiki" 1.3 by sng
Powered by PHP 5.3.29

HTML convert time to 0.008 sec.