モジュール 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 数字: * UNICODE_CHARACTER_CLASSが設定されていない場合は[0-9] 「Unicodeサポート」を参照してください。
\D 数字以外: [^0-9]
\h 水平方向の空白文字: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\H 水平以外の空白文字: [^\h]
\s 空白文字: UNICODE_CHARACTER_CLASSが設定されていない場合は[ \t\n\x0B\f\r] 「Unicodeサポート」を参照してください。
\S 空白以外の文字: [^\s]
\v 垂直方向の空白文字: [\n\x0B\f\r\x85\u2028\u2029]
\V 垂直方向以外の空白文字: [^\v]
\w 単語文字: UNICODE_CHARACTER_CLASSが設定されていない場合は[a-zA-Z_0-9] 「Unicodeサポート」を参照してください。
\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 単語境界 : (?:(?<=\w)(?=\W)|(?<=\W)(?=\w)) (単語以外の文字が単語文字と接する場所)
\b{g} Unicode拡張書記素クラスタ境界
\B 単語以外の境界: [^\b]
\A 入力の先頭
\G 前回のマッチの末尾
\Z 最後の行末記号がある場合は、それを除く入力の末尾 
\z 入力の末尾
改行正規表現エンジン
\R Unicode改行シーケンス、\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] と同等です
Unicode Extended Grapheme matcher
\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」がマッチした名前付きキャプチャリング・グループ
引用
\ なし。だが、次の文字を引用する
\Q なし、\Eまでのすべての文字を\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ソース・コードの文字列リテラル内のバックスラッシュは、「Java言語仕様」で必要であると解釈されます。Unicodeエスケープ(セクション3.3)またはその他の文字エスケープ(セクション3.10.6)として解釈されます。 したがって、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モードがアクティブになっている場合、^は、入力の最初と、入力の最後以外のすべての行終了文字の後で一致します。 MULTILINEモードの場合、$は、行終了文字の直前または入力シーケンスの終端に一致します。

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

グループ番号

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

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

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

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

グループ名

キャプチャリング・グループには、"name"、named-capturing group、を割り当てることができ、後で"name"によって逆参照されます。 グループ名は、次の文字で構成されます。 最初の文字はletterである必要があります。

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

named-capturing groupには、引き続き「グループ番号」で説明されているように番号が付けられます。

グループと入力シーケンスがマッチされると、そのグループと最後にマッチした部分シーケンスが常に前方参照されます。 数量子によりグループが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構造で記述されます。\p{prop}は、入力に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
  • 小文字
  • 大文字
  • Titlecase
  • 記号
  • Control
  • White_Space
  • Digit
  • Hex_Digit
  • Join_Control
  • Noncharacter_Code_Point
  • 割当て済
  • Emoji
  • Emoji_Presentation
  • Emoji_Modifier
  • Emoji_Modifier_Base
  • Emoji_Component
  • Extended_Pictographic

次の「事前定義済の文字クラス」および「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と同様にグループの最後で復元されます。

  • Perlのフリースペーシング・モード (このクラスではコメント・モードと呼ばれる)は、正規表現の(?x)で (または、式のコンパイル時にCOMMENTSフラグによって)指定されますが、文字クラス内の空白を無視しません。 このクラスでは、コメント・モードの場合に正規表現の一部として考慮されるように、文字クラス内の空白をエスケープする必要があります。

正規表現構造の動作の詳細は、正規表現の習得, 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)
    このパターンのマッチに基づいて、指定された入力シーケンスを分割します。
    このパターンのマッチに基づいて、指定された入力シーケンスからストリームを作成します。
    splitWithDelimiters(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は、Perlで呼び出される"single-line"モードのニーモニックです。)

      関連項目:
    • 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)
      指定されたフラグを使用して、指定された正規表現をパターンにコンパイルします。

      フラグにCANON_EQを設定すると、メモリー不足の中程度のリスクが生じる可能性があります。

      実装上のノート:
      CANON_EQが指定され、任意の文字の結合マークの数が大きすぎる場合、OutOfMemoryErrorがスローされます。
      パラメータ:
      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)
      指定された入力とこのパターンをマッチする正規表現エンジンを作成します。
      実装上のノート:
      Patternが直列化復元されると、コンパイルは、このメソッドの直接または間接的な起動まで遅延されます。 したがって、直列化復元されたパターンのフラグの間にCANON_EQがあり、任意の文字の結合マークの数が大きすぎる場合、compile(String, int)のようにOutOfMemoryErrorがスローされます。
      パラメータ:
      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 - 結果のしきい値(上記のとおり)
      戻り値:
      このパターンのマッチの両端で入力を分割することによって計算された文字列の配列
    • splitWithDelimiters

      public String[] splitWithDelimiters(CharSequence input, int limit)
      このパターンの一致を囲む入力シーケンスを分割し、文字列と一致するデリミタの両方を返します。

      このメソッドから返される配列は、入力シーケンスの部分文字列で構成されます。これらの部分文字列は、このパターンとマッチする別の部分シーケンスによって分割された文字列か、入力シーケンスの終了によって分割された文字列です。 各部分文字列の直後に、このパターンに一致する部分列(デリミタ)が続き、最後の部分文字列を「除き」、その後に何も続いていません。 配列内の部分文字列と区切り文字は、入力での出現順序になります。 このパターンが入力シーケンスの部分シーケンスにマッチしない場合、結果として得られる配列は 1 つの要素、つまり文字列形式の入力シーケンスだけで構成されます。

      入力シーケンスの先頭に、正の幅のマッチがある場合、結果の配列の先頭に、空の先頭部分文字列が含まれます。 最初にゼロ幅が一致しても、そのような空の先頭部分文字列や空の区切り文字は生成されません。

      limitパラメータは、このパターンの適用回数を制御するため、結果となる配列の長さに影響を及ぼします。

      • limitが正の場合、パターンは最大limit - 1回適用され、配列の長さは2×limit - 1よりも大きくならず、配列の最後のエントリには、最後に一致したデリミタを超えるすべての入力が含まれます。
      • limitがゼロの場合、パターンは可能なかぎり何度も適用され、配列には任意の長さを指定でき、後続の空の文字列(部分文字列またはデリミタ)は破棄されます。
      • limitが負の場合、パターンは可能なかぎり適用され、配列の長さは任意になります。

      たとえば、入力"boo:::and::foo"は、次のパラメータを使用して結果を生成します:

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

      パラメータ:
      input - 分割される文字シーケンス
      limit - 結果のしきい値(上記のとおり)
      戻り値:
      このパターンの一致の前後に入力を分割して計算される文字列の配列、置換部分文字列および一致する区切り文字
      導入されたバージョン:
      21
    • 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
    • namedGroups

      public Map<String,Integer> namedGroups()
      キャプチャリング・グループ名からグループ番号への変更不可能なマップを返します。 名前付きグループがない場合は、空のマップを返します。
      戻り値:
      キャプチャリング・グループ名からグループ番号への変更不可能なマップ
      導入されたバージョン:
      20
    • 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
      関連項目: