JavaTM 2
Platform
Std. Ed. v1.4.0

java.util.regex
クラス Pattern

java.lang.Object
  |
  +--java.util.regex.Pattern
すべての実装インタフェース:
Serializable

public final class Pattern
extends Object
implements Serializable

コンパイル済みの正規表現です。

正規表現は、文字列として指定し、このクラスのインスタンスにコンパイルする必要があります。生成されたパターンは、Matcher オブジェクトを作成するために使用されます。このオブジェクトは、任意の 文字シーケンス とこの正規表現をマッチできます。マッチを実行したときの状態はすべて正規表現エンジンに格納されます。このため、複数の正規表現エンジンが同じパターンを共有できます。

標準的な呼び出しシーケンスは、次のようになります。

 Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

このクラスに定義した matches メソッドを使用すれば、正規表現は一度使用するだけで済みます。このメソッドを 1 回呼び出すだけで、表現がコンパイルされ、入力シーケンスとマッチされます。次の文は、上記の 3 つの文と等価です。

 boolean b = Pattern.matches("a*b", "aaaaab");
ただし、マッチを繰り返す場合は、コンパイル済みのパターンを再利用できないため、効率が低下します。

このクラスのインスタンスは不変であるため、複数のスレッドで同時に使用できます。Matcher クラスのインスタンスは、複数スレッドでの同時使用に対応していません。

正規表現構文の要約

構文 マッチ対象
 
文字
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 を持つ文字
¥t タブ文字 ('\u0009')
¥n 改行文字 ('\u000A')
¥r キャリッジリターン文字 ('\u000D')
¥f 用紙送り文字 ('\u000C')
¥a 警告 (ベル) 文字 ('\u0007')
¥e エスケープ文字 ('\u001B')
¥cx x に対応する制御文字
 
文字クラス
[abc] ab、または c (単純クラス)
[^abc] abc 以外の文字 (否定)
[a-zA-Z] az または AZ (範囲)
[a-d[m-p]] ad、または mp: [a-dm-p] (結合)
[a-z&&[def]] def (交差)
[a-z&&[^bc]] bc を除く az: [ad-z] (減算)
[a-z&&[^m-p]] mp を除く az: [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]
 
POSIX 文字クラス (US-ASCII のみ)
¥p{Lower} 小文字の英字: [a-z]
¥p{Upper} 大文字の英字: [A-Z]
¥p{ASCII} すべての ASCII 文字: [¥x00-¥x7F]
¥p{Alpha} 英字: [¥p{Lower}¥p{Upper}]
¥p{Digit} 10 進数字: [0-9]
¥p{Alnum} 英数字: [¥p{Alpha}¥p{Digit}]
¥p{Punct} 句読文字: !"#$%&'()*+,-./:;<=>?@[¥]^_`{|}‾ のいずれか
¥p{Graph} 表示できる文字: [¥p{Alnum}¥p{Punct}]
¥p{Print} プリント可能文字: [¥p{Graph}]
¥p{Blank} 空白またはタブ: [ ¥t]
¥p{Cntrl} 制御文字: [¥x00-¥x1F¥x7F]
¥p{XDigit} 16 進数字: [0-9a-fA-F]
¥p{Space} 空白文字: [ ¥t¥n¥x0B¥f¥r]
 
Unicode ブロックとカテゴリのクラス
¥p{InGreek} ギリシャ語ブロックの文字 (単純ブロック)
¥p{Lu} 大文字 (単純カテゴリ)
¥p{Sc} 通貨記号
¥P{InGreek} ギリシャ語ブロック以外の文字 (否定)
[¥p{L}&&[^¥p{Lu}]]  大文字以外の文字 (減算)
 
境界正規表現エンジン
^ 行の先頭
$ 行の末尾
¥b 単語境界
¥B 非単語境界
¥A 入力の先頭
¥G 前回のマッチの末尾
¥Z 最後の行末記号がある場合は、それを除く入力の末尾
¥z 入力の末尾
 
最長一致数量子
X? X、1 回または 0 回
X* X、0 回以上
X+ X、1 回以上
X{n} Xn
X(n,} Xn 回以上
X{n,m} Xn 回以上、m 回以下
 
最短一致数量子
X?? X、1 回または 0 回
X*? X、0 回以上
X+? X、1 回以上
X{n}? Xn
X(n,}? Xn 回以上
X{n,m}? Xn 回以上、m 回以下
 
強欲な数量子
X?+ X、1 または 0 回
X*+ X、0 回以上
X++ X、1 回以上
X{n}+ Xn
X(n,}+ Xn 回以上
X{n,m}+ Xn 回以上、m 回以下
 
論理演算子
XY X の直後に Y
X|Y X または Y
(X) X、前方参照を行う正規表現グループ
 
前方参照
¥n マッチした n 番目の前方参照を行う正規表現グループ
 
引用
¥ 正規表現ではないが、次の文字をエスケープする
¥Q 正規表現ではないが、¥E までのすべての文字をエスケープする
¥E 正規表現ではないが、¥Q で開始された引用をエスケープする
 
特殊な構文 (前方参照を行わない)
(?:X) X前方参照を行わない正規表現グループ
(?idmsux-idmsux)  正規表現ではないが、マッチフラグのオン/オフを切り替える
(?idmsux-idmsux:X)   X、指定されたフラグをオン/オフにした前方参照を行わない正規表現グループ
(?=X) X、幅ゼロの肯定先読み
(?!X) X、幅ゼロの否定先読み
(?<=X) X、幅ゼロの肯定後読み
(?<!X) X、幅ゼロの否定後読み
(?>X) X、独立した前方参照を行わない正規表現グループ

バックスラッシュ、エスケープ、および引用

バックスラッシュ文字 ('¥') は、上記の表に定義されている構文をエスケープします。また、指定しなかった場合は、エスケープされていないと解釈される文字列を引用します。たとえば、正規表現 ¥¥ は 1 つのバックスラッシュとマッチし、¥{ は左括弧とマッチします。

英字の前にバックスラッシュを使用したときに、その英字がエスケープ構文でない場合は、エラーになります。これらのパターンは、正規表現言語の今後の拡張に予約されています。英字以外の文字の場合は、その文字がエスケープ構文に含まれるかどうかにかかわらず、バックスラッシュを指定できます。

Java 言語仕様では、Java ソースコードの文字列リテラルに含まれるバックスラッシュは、Unicode エスケープなどの文字エスケープとして有効であると解釈されます。このため、バックスラッシュが Java バイトコードコンパイラによって解釈されないようにするには、正規表現を表す文字列リテラル内でバックスラッシュを 2 つ続ける必要があります。たとえば、文字列リテラル "\b" は、正規表現と解釈されると、バックスペース 1 文字とマッチされます。しかし、"\\b" は単語境界とマッチされます。また、文字列リテラル "\(hello\)" は不当になり、コンパイル時エラーが発生します。文字列 (hello) とマッチされるには、文字列リテラル "\\(hello\\)" を使用する必要があります。

行末記号

「行末記号」とは、入力文字シーケンスの行の末尾を指定するときに使用する、1 文字または 2 文字の文字シーケンスです。次の文字が行末記号として認識されます。

UNIX_LINES モードが有効な場合は、改行文字だけが行末記号として認識されます。

正規表現 . は、DOTALL フラグが指定されていない場合、行末記号以外のすべての文字とマッチされます。

正規表現グループと前方参照

前方参照を行う正規表現グループには、左から右方向に左丸括弧を数えることによって、番号が付けられます。たとえば、表現 ((A)(B(C))) は、次の 4 つのグループに分類されます。

1     ((A)(B(C)))
2 (A)
3 (B(C))
4 (C)

グループ 0 は、常に表現全体を表します。

前方参照を行う正規表現グループがこのように分類されてから、入力シーケンスの各部分シーケンスがこれらのグループとマッチされ、マッチするたびに部分シーケンスが保存されます。正規表現グループの部分シーケンスは、前方参照として表現内であとで使用できます。また、マッチ操作が完了したら、正規表現エンジンから取り出すこともできます。

グループと入力シーケンスがマッチされると、そのグループと最後にマッチした部分シーケンスが常に前方参照されます。数量子を指定した場合は、グループがもう一度評価されます。2 回目の評価が失敗した場合でも、その前に前方参照された値がある場合は、その値が保持されます。たとえば、文字列 "aba" を表現 (a(b)?)+ とマッチした場合は、グループ 2 に設定された "b" が保持されます。前方参照されたすべての入力は、各マッチが始まる前に破棄されます。

(? で始まるグループは、純粋な「前方参照されない正規表現」グループで、テキストを前方参照せず、グループ全体にカウントされません。

Unicode サポート

このクラスは、Unicode Technical Report #18: Unicode Regular Expression Guidelinesに準拠しており、その第 2 レベルを実装しています。ただし、構文がわずかに異なります。

Java ソースコードでは、\u2014 などの Unicode エスケープシーケンスは、「Java 言語仕様」の ?3.3 に基づいて処理されます。これらのエスケープシーケンスは、正規表現パーサによって直接実装されるため、ファイルまたはキーボードから読み込んだ表現の中でも Unicode エスケープを使用できます。つまり、文字列 "\u2014""¥¥u2014" は等価ではありませんが、同じパターンにコンパイルされ、16 進値 0x2014 の文字とマッチします。

Unicode ブロックおよびカテゴリは、Perl と同様に ¥p および ¥P 構文で記述します。入力にプロパティ prop が含まれる場合、¥p{prop} はマッチしますが、¥P{{prop} はマッチしません。ブロックには、InMongolian のように、接頭辞 In を指定します。カテゴリには、接頭辞 Is を指定することもできます。¥p{L}¥p{IsL} は、Unicode 文字のカテゴリを表します。ブロックとカテゴリは、文字クラスの内部および外部のどちらにも使用できます。

サポートされている Unicode ブロックとカテゴリは、「The Unicode Standard, Version 3.0に記載されています。ブロック名は、第 14 章とUnicode Character Databaseのファイル Blocks-3.txt に定義されています。ただし、空白は削除します。たとえば、"Basic Latin""BasicLatin" となります。カテゴリ名については、Unicode 標準 (p. 88) の表 4 〜 5 に規準と情報が定義されています。

Perl 5 との比較

このクラスでサポートされていない Perl 構文

このクラスでサポートされているが、Perl でサポートされていない構文

Perl との大きな相違点

正規表現構文の動作の詳細については、Mastering Regular Expressions』 (Jeffrey E. F. Friedl 著、O'Reilly and Associates、1997 年) を参照してください。

導入されたバージョン:
1.4
関連項目:
String.split(String, int), String.split(String), 直列化された形式

フィールドの概要
static int CANON_EQ
          標準等価を有効にします。
static int CASE_INSENSITIVE
          大文字と小文字を区別しないマッチングを有効にします。
static int COMMENTS
          パターン内で空白とコメントを使用できるようにします。
static int DOTALL
          DOTALL モードを有効にします。
static int MULTILINE
          複数行モードを有効にします。
static int UNICODE_CASE
          Unicode に準拠した大文字と小文字を区別しないマッチングを有効にします。
static int UNIX_LINES
          Unix ラインモードを有効にします。
 
メソッドの概要
static Pattern compile(String regex)
          指定された正規表現をパターンにコンパイルします。
static Pattern compile(String regex, int flags)
          指定されたフラグを使用して、指定された正規表現をパターンにコンパイルします。
 int flags()
          このパターンのマッチフラグを返します。
 Matcher matcher(CharSequence input)
          指定された入力とこのパターンをマッチする正規表現エンジンを作成します。
static boolean matches(String regex, CharSequence input)
          指定された正規表現をコンパイルして、指定された入力とその正規表現をマッチします。
 String pattern()
          このパターンのコンパイル元の正規表現を返します。
 String[] split(CharSequence input)
          このパターンのマッチに基づいて、指定された入力シーケンスを分割します。
 String[] split(CharSequence input, int limit)
          このパターンのマッチに基づいて、指定された入力シーケンスを分割します。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

UNIX_LINES

public static final int UNIX_LINES
Unix ラインモードを有効にします。

このモードでは、'¥n' 行末記号以外は、.^$ の動作で認識されません。

Unix ラインモードは、埋め込みフラグ表現 (?d) 使用して有効にすることもできます。

関連項目:
定数フィールド値

CASE_INSENSITIVE

public static final int CASE_INSENSITIVE
大文字と小文字を区別しないマッチングを有効にします。

デフォルトでは、大文字と小文字を区別しないマッチングでは、US-ASCII 文字エンコーディングの文字だけがマッチすることを前提としています。Unicode に準拠した大文字と小文字を区別しないマッチングを有効にするには、UNICODE_CASE フラグをこのフラグと組み合わせて指定します。

大文字と小文字を区別しないマッチングは、埋め込みフラグ表現 (?i) を使用して有効にすることもできます。

このフラグを指定すると、パフォーマンスがわずかに低下する場合があります。

関連項目:
定数フィールド値

COMMENTS

public static final int COMMENTS
パターン内で空白とコメントを使用できるようにします。

このモードでは、空白は無視され、# で始まる埋め込みコメントは行末まで無視されます。

コメントモードは、埋め込みフラグ表現 (?x) を使用して有効にすることもできます。

関連項目:
定数フィールド値

MULTILINE

public static final int MULTILINE
複数行モードを有効にします。

複数行モードでは、表現 ^$ は、それぞれ行末記号または入力シーケンスの末尾の直後または直前にマッチします。デフォルトでは、これらの表現は入力シーケンス全体の先頭と末尾にだけマッチします。

複数行モードは、埋め込みフラグ表現 (?m) を使用して有効にすることもできます。

関連項目:
定数フィールド値

DOTALL

public static final int DOTALL
DOTALL モードを有効にします。

DOTALL モードでは、表現 . は行末記号を含む任意の文字にマッチします。デフォルトでは、この表現は行末記号にマッチしません。

DOTALL モードは、埋め込みフラグ表現 (?s) を使用して有効にすることもできます (s は、「単一行」モードのニーモニックで、Perl では DOTALL モードと呼ばれる)。

関連項目:
定数フィールド値

UNICODE_CASE

public static final int UNICODE_CASE
Unicode に準拠した大文字と小文字を区別しないマッチングを有効にします。

このフラグと CASE_INSENSITIVE フラグを同時に指定した場合は、Unicode 標準に準拠した大文字と小文字を区別しないマッチングが行われます。デフォルトの大文字と小文字を区別しないマッチングでは、US-ASCII 文字デンコーディングの文字だけがマッチします。

Unicode に準拠した大文字と小文字を区別しないマッチングは、埋め込みフラグ表現 (?u) を使用して有効にすることもできます。

このフラグを指定すると、パフォーマンスが低下する場合があります。

関連項目:
定数フィールド値

CANON_EQ

public static final int CANON_EQ
標準等価を有効にします。

このフラグを指定したときは、2 つの文字の完全な標準分解がマッチした場合にかぎり、それらの文字がマッチするとみなされます。たとえば、このフラグを指定すると、表現 "a\u030A" は文字列 "?" にマッチします。デフォルトのマッチングでは、標準等価が考慮されません。

標準等価を有効にするための埋め込みフラグ文字はありません。

このフラグを指定すると、パフォーマンスが低下する場合があります。

関連項目:
定数フィールド値
メソッドの詳細

compile

public static Pattern compile(String regex)
指定された正規表現をパターンにコンパイルします。

パラメータ:
regex - コンパイルされる表現
例外:
PatternSyntaxException - 表現の構文が無効である場合

compile

public static Pattern compile(String regex,
                              int flags)
指定されたフラグを使用して、指定された正規表現をパターンにコンパイルします。

パラメータ:
regex - コンパイルされる表現
flags - マッチフラグ。CASE_INSENSITIVEMULTILINEDOTALLUNICODE_CASECANON_EQ などを含むビットマスク
例外:
IllegalArgumentException - 定義されたマッチフラグに対応しないビット値が flags に設定された場合
PatternSyntaxException - 表現の構文が無効である場合

pattern

public String pattern()
このパターンのコンパイル元の正規表現を返します。

戻り値:
このパターンのコンパイル元

matcher

public Matcher matcher(CharSequence input)
指定された入力とこのパターンをマッチする正規表現エンジンを作成します。

パラメータ:
input - マッチされる文字シーケンス
戻り値:
このパターンの新しい正規表現エンジン

flags

public int flags()
このパターンのマッチフラグを返します。

戻り値:
このパターンがコンパイルされたときに指定されたマッチフラグ

matches

public static boolean matches(String regex,
                              CharSequence input)
指定された正規表現をコンパイルして、指定された入力とその正規表現をマッチします。

このメソッドを次の形式で呼び出すと、上記の動作が行われます。

 Pattern.matches(regex, input);
上記のメソッドは、次の表現と同様に動作します。
 Pattern.compile(regex).matcher(input).matches()

パターンが繰り返し使用する場合は、そのパターンをコンパイルして再利用した方が、毎回このメソッドを呼び出した場合よりも効率的です。

パラメータ:
regex - コンパイルされる表現
input - マッチされる文字シーケンス
例外:
PatternSyntaxException - 表現の構文が無効である場合

split

public String[] split(CharSequence input,
                      int limit)
このパターンのマッチに基づいて、指定された入力シーケンスを分割します。

このメソッドから返される配列は、入力シーケンスの部分文字列で構成されます。これらの部分文字列は、このパターンとマッチする別の部分シーケンスによって分割された文字列か、入力シーケンスの終了によって分割された文字列です。配列内の部分文字列は、入力シーケンス内で発生した順番に並んでいます。このパターンが入力シーケンスの部分シーケンスにマッチしない場合、返される配列は 1 つの要素、つまり文字列形式の入力シーケンスだけで構成されます。

limit パラメータは、このパターンの適用回数、つまり、返される配列の長さを制御します。制限 n がゼロより大きい場合、このパターンは n - 1 回以下の回数が適用され、配列の長さは n 以下になります。配列の最後のエントリには、最後にマッチした区切り文字以降の入力シーケンスがすべて含まれます。n が負の値の場合、このパターンの適用回数と配列の長さは制限されません。n がゼロの場合、このパターンの適用回数と配列の長さは制限されませんが、後続の空の文字列は破棄されます。

たとえば、入力シーケンス "boo:and:foo" は、これらのパラメータによって次のように分割されます。

正規表現     制限     結果
: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }

パラメータ:
input - 分割される文字シーケンス
limit - 結果のしきい値 (上記のとおり)
戻り値:
文字列の配列。このパターンのマッチに基づいて分割された入力シーケンスから作成される

split

public String[] split(CharSequence input)
このパターンのマッチに基づいて、指定された入力シーケンスを分割します。

このメソッドは、limit 引数をゼロにして split メソッドを呼び出した場合と同様に入力シーケンスを分割します。つまり、返される配列には後続の空の文字列は含まれません。

たとえば、入力シーケンス "boo:and:foo" は、これらの表現によって次のように分割されます。

正規表現     結果
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }

パラメータ:
input - 分割される文字シーケンス
戻り値:
文字列の配列。このパターンのマッチに基づいて分割された入力シーケンスから作成される

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.