モジュール java.base
パッケージ 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回呼び出すだけで、表現がコンパイルされ、入力シーケンスとのマッチが行われます。 次の文

 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を持つ文字
\x{h...h} 16進値0xh...hを持つ文字(Character.MIN_CODE_POINT  <= 0xh...h <= Character.MAX_CODE_POINT)
\N{name} Unicode文字の名前が'name'の文字
\t タブ文字('\u0009')
\n 改行文字('\u000A')
\r キャリッジ・リターン文字('\u000D')
\f 用紙送り文字('\u000C')
\a 警告(ベル)文字('\u0007')
\e エスケープ文字('\u001B')
\cx xに対応する制御文字
文字クラス
[abc] ab、またはc (単純クラス)
[^abc] abc以外の文字(否定)
[a-zA-Z] a - zまたはA - Z (範囲)
[a-d[m-p]] a - dまたはm - p: [a-dm-p] (結合)
[a-z&&[def]] de、またはf (交差)
[a-z&&[^bc]] a - z (bcを除く): [ad-z] (減算)
[a-z&&[^m-p]] a - z (m - pを除く): [a-lq-z] (減算)
定義済の文字クラス
. 任意の文字(行末記号とマッチする場合もある)
\d 数字: [0-9]
\D 数字以外: [^0-9]
\h 水平方向の空白文字: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\H 水平方向以外の空白文字: [^\h]
\s 空白文字: [\t\n\x0B\f\r]
\S 非空白文字: [^\s]
\v 垂直方向の空白文字: [\n\x0B\f\r\x85\u2028\u2029]
\V 垂直方向以外の空白文字: [^\v]
\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} 句読文字: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~の1つ
\p{Graph} 表示できる文字: [\p{Alnum}\p{Punct}]
\p{Print} プリント可能文字: [\p{Graph}\x20]
\p{Blank} 空白またはタブ: [\t]
\p{Cntrl} 制御文字: [\x00-\x1F\x7F]
\p{XDigit} 16進数字: [0-9a-fA-F]
\p{Space} 空白文字: [\t\n\x0B\f\r]
java.lang.Characterクラス(単純なjava文字タイプ)
\p{javaLowerCase} java.lang.Character.isLowerCase()と等価
\p{javaUpperCase} java.lang.Character.isUpperCase()と等価
\p{javaWhitespace} java.lang.Character.isWhitespace()と等価
\p{javaMirrored} java.lang.Character.isMirrored()と等価
Unicodeスクリプト、ブロック、カテゴリ、バイナリ・プロパティのクラス
\p{IsLatin} Latin スクリプト文字(スクリプト)
\p{InGreek} Greek ブロックの文字(ブロック)
\p{Lu} 大文字(カテゴリ)
\p{IsAlphabetic} 英字(バイナリ・プロパティ)
\p{Sc} 通貨記号
\P{InGreek} ギリシャ語ブロック以外の文字(否定)
[\p{L}&&[^\p{Lu}]] 大文字以外の文字(減算)
境界正規表現エンジン
^ 行の先頭
$ 行の末尾
\b 単語境界
\b{g} Unicode拡張書記素クラスタ境界
\B 非単語境界
\A 入力の先頭
\G 前回のマッチの末尾
\Z 最後の行末記号がある場合は、それを除く入力の末尾 
\z 入力の末尾
改行正規表現エンジン
\R すべてのUnicode改行シーケンスは、\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] に等しい
Unicode拡張書記素マッチャ
\X 任意のUnicode拡張書記素クラスタ
最長一致数量子
X? X、1または0回
X* X、0回以上
X+ X、1回以上
X{n} X、正確にn
X{n,} Xn回以上
X{n,m} Xn回以上、m回以下
最短一致数量子
X?? X、1または0回
X*? X、0回以上
X+? X、1回以上
X{n}? X、正確にn
X{n,}? Xn回以上
X{n,m}? Xn回以上、m回以下
強欲な数量子
X?+ X、1または0回
X*+ X、0回以上
X++ X、1回以上
X{n}+ X、正確にn
X{n,}+ Xn回以上
X{n,m}+ Xn回以上、m回以下
論理演算子
XY Xの直後にY
X|Y XまたはY
(X) X、キャプチャリング・グループとして
後方参照
\n マッチしたn番目のキャプチャリング・グループ
\k<name> 「name」がマッチした名前付きキャプチャリング・グループ
Quotation
\ なし。だが、次の文字を引用する
\Q なし。だが、\Eまでのすべての文字を引用します
\E なし。だが、\Qで開始された引用を終了します
特殊な構文(名前付きキャプチャリングや非キャプチャリング)
(?<name>X) X、名前付きキャプチャリング・グループとして
(?:X) X、非キャプチャリング・グループとして
(?idmsuxU-idmsuxU)  なし。だが、マッチ・フラグi d m s u x Uのオン - オフを切り替える
(?idmsuxU-idmsuxU:X)   X、特定のフラグi d m s u x Uのある非キャプチャリング・グループ オン/オフ
(?=X) X、幅ゼロの肯定先読み
(?!X) X、幅ゼロの否定先読み
(?<=X) X、幅ゼロの肯定後読み
(?<!X) X、幅ゼロの否定後読み
(?>X) X、独立した、非キャプチャリング・グループとして

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

バックスラッシュ文字(「\」)は、前述の表に定義されているエスケープ構文を導入する役割を果たします。また、指定しなかった場合に非エスケープ構文と解釈される文字列をエスケープします。 たとえば、正規表現\\は1つのバックスラッシュとマッチし、\{は左括弧とマッチします。

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

Javaソース・コードの文字列リテラル内のバックスラッシュは、Unicodeが(セクション3.3)をエスケープするか、または他の文字が(セクション3.10.6)をエスケープするため、「Java言語仕様」が必要とするように解釈されます。したがって、Javaバイトコード・コンパイラによる解釈から保護するには、正規表現内のバックスラッシュを二重にする必要があります。 たとえば、文字列リテラル「\b」は、正規表現と解釈されると、バックスペース1文字とマッチされます。しかし、「\\b」は単語境界とマッチされます。 また、文字列リテラル「\(hello\)」は不当になり、コンパイル時エラーが発生します。文字列(hello)とマッチされるには、文字列リテラル\\(hello\\)を使用する必要があります。

文字クラス

文字クラスは、ほかの文字クラス内に指定したり、結合演算子(暗黙的)や交差演算子(&&)を使用して作成することができます。 結合演算子は、1つ以上のオペランド・クラスに含まれるすべての文字を含むクラスを表します。 交差演算子は、2つのオペランド・クラスに含まれるすべての文字を含むクラスを表します。

文字クラス演算子は、次の順で優先順位が高くなります。

文字クラス演算子の優先順位。
優先順位
1 リテラル・エスケープ     \x
2 グルーピング [...]
3 範囲 a-z
4 結合 [a-e][i-u]
5 交差 [a-z&&[aeiou]]

実際には、異なるメタキャラクタのセットは、文字クラスの外部ではなく内部に存在することに留意してください。 たとえば、正規表現.は、文字クラス内部ではその特殊な意味を失いますが、表現-は範囲を示すメタ文字になります。

行末記号

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

  • 改行(ライン・フィード)文字 ('\n')
  • 直後に改行文字が付いたキャリッジ・リターン文字 ("\r\n")
  • 単独のキャリッジ・リターン文字 ('\r')
  • 次行文字 ('\u0085')
  • 行区切り文字 ('\u2028')
  • 段落区切り文字('\u2029')。

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

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

デフォルトでは、正規表現^および$は行末記号を無視し、入力シーケンス全体のそれぞれ先頭と末尾だけにマッチします。 MULTILINEモードがアクティブになると、^は入力の先頭、および入力の末尾を除くすべての行末記号の後にマッチします。 MULTILINEモードの場合、$は行末記号の直前、または入力シーケンスの末尾にマッチします。

グループとキャプチャリング

グループ番号

キャプチャリング・グループには、左から右方向に左丸括弧を数えることによって、番号が付けられます。 たとえば、表現((A)(B(C)))は、次の4つのグループに分類されます。

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

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

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

グループ名

キャプチャリング・グループには「name」を割り当てることもでき(名前付きキャプチャリング・グループ)、あとで「name」によって後方参照できます。 グループ名は、次の文字で構成されます。 最初の文字は英字である必要があります。

  • 大文字の'A' - 'Z' ('\u0041' - '\u005a')、
  • 小文字の'a' - 'z' ('\u0061' - '\u007a')、
  • 数字の'0' - '9' ('\u0030' - '\u0039')、

名前付きキャプチャリング・グループも、グループ番号で説明するように番号付けされます。

グループに関連付けられたキャプチャされた入力は常に、グループが最後に一致した部分列です。 数量子によりグループが2回目に評価される場合、前にキャプチャされた値がある場合は、2回目の評価が失敗した場合、その値が保持されます。 たとえば、文字列「aba」を表現(a(b)?)+とマッチした場合は、グループ2に設定された「b」が保持されます。 キャプチャされたすべての入力は、各マッチの開始時に破棄されます。

(?で始まるグループは、純粋な非キャプチャリング・グループで、テキストをキャプチャせず、グループ全体または名前付きのキャプチャリング・グループにカウントされません。

Unicodeサポート

このクラスは、Unicodeテクニカル標準 #18: Unicode正規表現のレベル1と、RL 2.1標準等価およびRL 2.2拡張書記素クラスタに準拠しています。

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

Unicode文字は、例えば補助文字U+2011Fはなくサロゲート・ペア\uD840 \uDD1Fの二つの連続のUnicodeエスケープ・シーケンス、\x{2011F}として指定することができ、構築物\x{...}に記載のように直接その「16進表記法」 (16進コード・ポイント値)を用いて表現することができます。

「Unicode文字の名前」は、指定された文字構造体\N{...}でサポートされています。たとえば、\N{WHITE SMILING FACE}は文字\u263Aを指定します。 このクラスでサポートされている文字名は、Character.codePointOf(name)と一致する有効なUnicode文字名です。

Unicode拡張書記素クラスタは、書記素クラスタ・マッチャ\Xと対応する境界マッチャ\b{g}によってサポートされています。

Unicodeスクリプト、ブロック、カテゴリ、およびバイナリ・プロパティは、Perlと同様に\pおよび\P構文で記述します。入力にプロパティpropが含まれる場合、\p{prop}はマッチしますが、\P{prop}はマッチしません。

スクリプト、ブロック、カテゴリ、およびバイナリ・プロパティは、文字クラスの内部および外部のどちらにも使用できます。

スクリプトは、IsHiraganaのように、接頭辞Isを付けて指定するか、または、script=Hiraganasc=Hiraganaのように、scriptキーワード(またはその短縮形式sc) を使用して指定します。

Patternのサポートする書体名は、UnicodeScript.forNameによって受け入れられ、定義される有効な書体名です。

ブロックは、InMongolianのように、接頭辞Inを付けて指定するか、または、block=Mongolianblk=Mongolianのように、blockキーワード(またはその短縮形式blk)を使用して指定します。

Patternのサポートするブロック名は、UnicodeBlock.forNameによって受け入れられ、定義される有効なブロック名です。

カテゴリはオプションの接頭辞Isによって指定できます。\p{L}\p{IsL}のどちらもUnicode文字のカテゴリを示します。 スクリプトやブロックと同じように、カテゴリもgeneral_category=Lugc=Luのように、キーワードgeneral_category (またはその短縮形式gc)を使用して指定することができます。

サポートされているカテゴリは、Characterクラスで指定されたバージョンのThe Unicode Standardに記載されています。 カテゴリ名については、標準に規準と情報が定義されています。

バイナリ・プロパティは、IsAlphabeticのように、接頭辞Isを使用して指定します。 Patternによってサポートされるバイナリ・プロパティは次のとおりです

  • Alphabetic
  • Ideographic
  • Letter
  • Lowercase
  • Uppercase
  • Titlecase
  • Punctuation
  • Control
  • White_Space
  • Digit
  • Hex_Digit
  • Join_Control
  • Noncharacter_Code_Point
  • Assigned

次の「事前定義済の文字クラス」および「POSIX文字クラス」は、UNICODE_CHARACTER_CLASSフラグが指定されている場合、Unicodeテクニカル標準 #18: Unicode正規表現「Annex C: 互換性プロパティ」の推奨事項に準拠しています。

Unicodeモードの定義済のPOSIX文字クラス
クラス マッチ
\p{Lower} 小文字:\p{IsLowercase}
\p{Upper} 大文字:\p{IsUppercase}
\p{ASCII} すべてのASCII文字: [\x00-\x7F]
\p{Alpha} 英字:\p{IsAlphabetic}
\p{Digit} 10進数の文字:\p{IsDigit}
\p{Alnum} 英数字:[\p{IsAlphabetic}\p{IsDigit}]
\p{Punct} 句読記号:\p{IsPunctuation}
\p{Graph} 表示できる文字: [^\p{IsWhite_Space}\p{gc=Cc}\p{gc=Cs}\p{gc=Cn}]
\p{Print} プリント可能文字: [\p{Graph}\p{Blank}&&[^\p{Cntrl}]]
\p{Blank} 空白またはタブ: [\p{IsWhite_Space}&&[^\p{gc=Zl}\p{gc=Zp}\x0a\x0b\x0c\x0d\x85]]
\p{Cntrl} 制御文字: \p{gc=Cc}
\p{XDigit} 16進数字: [\p{gc=Nd}\p{IsHex_Digit}]
\p{Space} 空白文字:\p{IsWhite_Space}
\d 数字: \p{IsDigit}
\D 数字以外: [^\d]
\s 空白文字: \p{IsWhite_Space}
\S 非空白文字: [^\s]
\w 単語構成文字: [\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}\p{IsJoin_Control}]
\W 非単語文字: [^\w]

java.lang.Characterブールismethodnameメソッド(非推奨のものを除く)と同様に動作するカテゴリは、指定されたプロパティの名前がjavamethodnameである同じ\p{prop}構文を介して使用できます

Perl 5との比較

Patternエンジンは、Perl 5と同じく、順序付けされた代替に対する従来のNFAベースのマッチングを実行します。

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

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

  • 文字クラスの結合と交差(前述)。

Perlとの大きな相違点

  • Perlでは、\1から\9は常に後方参照と解釈されます。9を超える数字がバックスラッシュでエスケープされているときは、対応する数の部分パターンが存在する場合、後方参照とみなされます。存在しない場合は、8進数のエスケープ(可能な場合)とみなされます。 このクラスでは、8 進数のエスケープは常にゼロで始まります。 \1 - \9は、常に後方参照と解釈されます。それより大きい数字は、正規表現のその箇所に対応する数の部分パターンが存在する場合は、後方参照とみなされます。存在しない場合は、その数字が既存のグループ番号以下になるか、1桁の数字になるまで、桁が減らされます。

  • Perlでは、最後のマッチが終了した場所からマッチの再開を要求するときは、gフラグを使用します。 この機能は、Matcherクラスによって暗黙的に提供されます。findメソッドを繰返し呼び出すと、正規表現エンジンがリセットされないかぎり、最後のマッチが終了した場所からマッチ操作が再開します。

  • Perl では、表現の最上位に埋め込まれたフラグが表現全体に適用されます。 このクラスの埋込みフラグは、埋め込まれた場所にかかわらず、その箇所でのみ有効になります。フラグがグループ内に埋め込まれている場合は、Perlと同様にグループの最後で復元されます。

正規表現構造の動作の詳細は、正規表現の習得, 3rd Edition、Jeffrey E. F. Friedl、O 'Reilly and Associates、2006年」を参照してください。

導入されたバージョン:
1.4
関連項目:
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final int
    正規等価を有効にします。
    static final int
    大文字と小文字を区別しないマッチングを有効にします。
    static final int
    パターン内で空白とコメントを使用できるようにします。
    static final int
    DOTALLモードを有効にします。
    static final int
    パターンのリテラル構文解析を有効にします。
    static final int
    複数行モードを有効にします。
    static final int
    Unicodeに準拠した大文字と小文字を区別しないマッチングを有効にします。
    static final int
    定義済みの文字クラスPOSIX文字クラスのUnicodeバージョンを使用可能にします。
    static final int
    Unixライン・モードを有効にします。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このパターンが指定された入力文字列と一致するかどうかをテストする述語を作成します。
    指定された入力文字列でこのパターンが検出されたかどうかをテストする述語を作成します。
    static Pattern
    compile(String regex)
    指定された正規表現をパターンにコンパイルします。
    static Pattern
    compile(String regex, int flags)
    指定されたフラグを使用して、指定された正規表現をパターンにコンパイルします。
    int
    このパターンのマッチ・フラグを返します。
    指定された入力とこのパターンをマッチする正規表現エンジンを作成します。
    static boolean
    matches(String regex, CharSequence input)
    指定された正規表現をコンパイルして、指定された入力とその正規表現をマッチします。
    このパターンのコンパイル元の正規表現を返します。
    static String
    指定されたStringのリテラル・パターンStringを返します。
    このパターンのマッチに基づいて、指定された入力シーケンスを分割します。
    split(CharSequence input, int limit)
    このパターンのマッチに基づいて、指定された入力シーケンスを分割します。
    このパターンのマッチに基づいて、指定された入力シーケンスからストリームを作成します。
    このパターンの文字列表現を返します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, 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)を使用して有効にすることもできます。

      関連項目:
    • LITERAL

      public static final int LITERAL
      パターンのリテラル構文解析を有効にします。

      このフラグが指定されている場合、パターンを指定する入力文字列は、リテラル文字のシーケンスとして処理されます。 入力シーケンス内のメタキャラクタまたはエスケープ・シーケンスに、特別な意味はありません。

      CASE_INSENSITIVEおよびUNICODE_CASEフラグをこのフラグとともに使用すると、マッチングに対する影響が維持されます。 ほかのフラグは不要になります。

      リテラル構文解析を有効にするための埋込みフラグ文字はありません。

      導入されたバージョン:
      1.5
      関連項目:
    • DOTALL

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

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

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

      関連項目:
    • 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」は文字列「\u00E5」にマッチします。 デフォルトのマッチングでは、正規等価が考慮されません。

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

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

      関連項目:
    • UNICODE_CHARACTER_CLASS

      public static final int UNICODE_CHARACTER_CLASS
      定義済みの文字クラスPOSIX文字クラスのUnicodeバージョンを使用可能にします。

      このフラグが指定されている場合、(US-ASCIIのみ) 「事前定義済の文字クラス」および「POSIX文字クラス」Unicodeテクニカル標準 #18: Unicode正規表現 「Annex C: 互換性プロパティ」に準拠しています。

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

      フラグはUNICODE_CASEを意味しています。つまり、Unicodeに準拠した大文字と小文字を区別しないマッチングを有効にします。

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

      導入されたバージョン:
      1.7
      関連項目:
  • メソッドの詳細

    • compile

      public static Pattern compile(String regex)
      指定された正規表現をパターンにコンパイルします。
      パラメータ:
      regex - コンパイルされる表現
      戻り値:
      パターンにコンパイルする指定された正規表現
      例外:
      PatternSyntaxException - 表現の構文が無効である場合
    • compile

      public static Pattern compile(String regex, int flags)
      指定されたフラグを使用して、指定された正規表現をパターンにコンパイルします。
      パラメータ:
      regex - コンパイルされる表現
      flags - マッチ・フラグ。CASE_INSENSITIVEMULTILINEDOTALLUNICODE_CASECANON_EQ, UNIX_LINESLITERALUNICODE_CHARACTER_CLASS、およびCOMMENTSを含めることができるビット・マスク
      戻り値:
      指定されたフラグを使用して、パターンにコンパイルする指定された正規表現
      例外:
      IllegalArgumentException - 定義済みマッチ・フラグに対応するビット値以外の値がflagsに設定されている場合
      PatternSyntaxException - 表現の構文が無効である場合
    • pattern

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

      public String toString()

      このパターンの文字列表現を返します。 これは、このパターンのコンパイル元の正規表現です。

      オーバーライド:
      toString、クラスObject
      戻り値:
      このパターンの文字列表現
      導入されたバージョン:
      1.5
    • 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パラメータは、このパターンの適用回数を制御するため、結果となる配列の長さに影響を及ぼします。

      • limitが正の場合、パターンは最大limit-1回適用され、配列の長さがlimitを超えることはなく、最後に一致したデリミタを超えるすべての入力が配列の最後のエントリに含まれます。

      • limitがゼロの場合、パターンは可能なかぎり何度も適用され、配列には任意の長さを指定でき、後続の空の文字列は破棄されます。

      • limitが負の場合、パターンは可能なかぎり適用され、配列の長さは任意になります。

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

      正規表現、制限、および結果を示す分割の例
      正規表現 制限 結果
      : 2 { "boo", "and:foo" }
      5 { "boo", "and", "foo" }
      -2 { "boo", "and", "foo" }
      o 5 { "b", "", ":and:f", "", "" }
      -2 { "b", "", ":and:f", "", "" }
      0 { "b", "", ":and:f" }

      パラメータ:
      input - 分割される文字シーケンス
      limit - 結果のしきい値(上記のとおり)
      戻り値:
      このパターンのマッチの両端で入力を分割することによって計算された文字列の配列
    • split

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

      このメソッドの動作は、2つの引数を取るsplitメソッドを、指定された入力シーケンスとゼロの制限引数を指定して呼び出した場合と同じになります。 つまり、結果として得られる配列には後続の空の文字列は含まれません。

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

      正規表現と結果を示す分割の例
      正規表現 結果
      : { "boo", "and", "foo" }
      o { "b", "", ":and:f" }

      パラメータ:
      input - 分割される文字シーケンス
      戻り値:
      このパターンのマッチの両端で入力を分割することによって計算された文字列の配列
    • quote

      public static String quote(String s)
      指定されたStringのリテラル・パターンStringを返します。

      このメソッドは、リテラル・パターンであるかのように文字列sにマッチするPatternの作成に使用可能なStringを生成します。

      入力シーケンス内のメタキャラクタまたはエスケープ・シーケンスに、特別な意味はありません。
      パラメータ:
      s - リテラル化する文字列
      戻り値:
      リテラル文字列置換
      導入されたバージョン:
      1.5
    • asPredicate

      public Predicate<String> asPredicate()
      指定された入力文字列でこのパターンが検出されたかどうかをテストする述語を作成します。
      APIのノート:
      このメソッドは、入力シーケンスからマッチャを作成した場合のように動作する述語を作成し、次のようなフォームの述語のようにfindを呼び出します。
      
         s -> matcher(s).find();
       
      戻り値:
      文字列のサブシーケンスの一致を検索するために使用できる述語。
      導入されたバージョン:
      1.8
      関連項目:
    • asMatchPredicate

      public Predicate<String> asMatchPredicate()
      このパターンが指定された入力文字列と一致するかどうかをテストする述語を作成します。
      APIのノート:
      このメソッドは、入力シーケンスからマッチャを作成した場合のように動作する述語を作成し、次のようなフォームの述語のようにmatchesを呼び出します。
      
         s -> matcher(s).matches();
       
      戻り値:
      入力文字列をこのパターンと照合するために使用できる述語。
      導入されたバージョン:
      11
      関連項目:
    • splitAsStream

      public Stream<String> splitAsStream(CharSequence input)
      このパターンのマッチに基づいて、指定された入力シーケンスからストリームを作成します。

      このメソッドから返されるストリームは、入力シーケンスの各部分文字列で構成されます。これらの部分文字列は、このパターンとマッチする別の部分シーケンスによって終了した文字列か、入力シーケンスの末尾によって終了した文字列です。 ストリーム内の部分文字列は、入力内で発生した順番に並んでいます。 末尾の空の文字列は破棄され、ストリーム内で検出されません。

      このパターンが入力の部分シーケンスにマッチしない場合、結果として得られるストリームは 1 つの要素、つまり文字列形式の入力シーケンスだけで構成されます。

      入力シーケンスの先頭に、正の幅のマッチがある場合、ストリームの先頭に、空の先頭部分文字列が含まれます。 先頭のゼロの幅の一致では、そのような空の先頭の部分文字列は生成されません。

      入力シーケンスが可変である場合、端末のストリーム操作の実行時に一定に保たれる必要があります。 そうしない場合、ストリーム終端操作の結果は保証されません。

      パラメータ:
      input - 分割される文字シーケンス
      戻り値:
      このパターンのマッチの両端で入力を分割することによって計算された文字列のストリーム
      導入されたバージョン:
      1.8
      関連項目: