モジュール 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
\\ バックスラッシュ文字
\0 n 8進値0nを持つ文字(0 <= n <= 7)
\0 nn 8進値0nnを持つ文字(0 <= n <= 7)
\0 mnn 8進値0mnnを持つ文字(0 <= m <= 3, 0 <= n <= 7)
\x hh 16進値 0xhhを持つ文字 
\u hhhh 16進値 0xhhhhを持つ文字 
\x {h...h} 16進値0xh...hを持つ文字(Character.MIN_CODE_POINT  <= 0xh...h <=&nbsp Character.MAX_CODE_POINT)
\N{name} Unicode文字の名前が'name'の文字
\t タブ文字(「\u0009」)
\n 改行文字(「\u000A」)
\r キャリッジ・リターン文字(「\u000D」)
\f 用紙送り文字(「\u000C」)
\a 警告(ベル)文字(「\u0007」)
\e エスケープ文字(「\u001B」)
\c x 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} 句読文字: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\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 Extended Grapheme matcher
\X 任意のUnicode拡張書記素クラスタ
最長一致数量子
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番目の前方参照を行う正規表現グループ
\k<name> 「名前」がマッチした名前付きの前方参照を行うグループ
引用
\ なし。だが、次の文字をエスケープする
\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のある「機密ではないグループ」 - off
(?=X) X、幅ゼロの肯定先読み
(?!X) X、幅ゼロの否定先読み
(?<=X) X、幅ゼロの肯定後読み
(?<!X) X、幅ゼロの否定後読み
(?>X) X、独立した前方参照を行わない正規表現グループ

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

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

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

Java™言語仕様では、Javaソース・コードの文字列リテラルに含まれるバックスラッシュは、Unicodeエスケープ(セクション3.3)やその他の文字エスケープ(セクション3.10.6)として必須と解釈されます。このため、バックスラッシュがJavaバイトコード・コンパイラによって解釈されないようにするには、正規表現を表す文字列リテラル内でバックスラッシュを2つ続ける必要があります。 たとえば、文字列リテラル「\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は、常に表現全体を表します。

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

グループ名

前方参照を行う正規表現グループには「名前」を割り当てることもでき(名前付きの前方参照を行う正規表現グループ)、あとで「名前」によって後方参照できます。 グループ名は、次の文字で構成されます。 最初の文字は英字である必要があります。

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

名前付きの前方参照を行う正規表現グループも、グループ番号で説明するように番号付けされます。

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

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

Unicodeサポート

このクラスは、Unicodeテクニカル標準 #18: Unicode正規表現のLevel 1と、RL2.1 Canonical等価およびRL2.2 Extended Grapheme Clustersに準拠しています。

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正規表現付録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]

methodnameメソッド(非推奨のメソッドを除く)であるjava.lang.Character booleanと同様に機能するカテゴリは、指定されたプロパティが名前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と同様にグループの最後で復元される。

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

導入されたバージョン:
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 LITERAL
    パターンのリテラル構文解析を有効にします。
    static int MULTILINE
    複数行モードを有効にします。
    static int UNICODE_CASE
    Unicodeに準拠した大文字と小文字を区別しないマッチングを有効にします。
    static int UNICODE_CHARACTER_CLASS
    定義済みの文字クラスPOSIX文字クラスのUnicodeバージョンを使用可能にします。
    static int UNIX_LINES
    Unixライン・モードを有効にします。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    Predicate<String> asMatchPredicate()
    このパターンが指定された入力文字列と一致するかどうかをテストする述語を作成します。
    Predicate<String> asPredicate()
    指定された入力文字列でこのパターンが検出されたかどうかをテストする述語を作成します。
    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()
    このパターンのコンパイル元の正規表現を返します。
    static String quote​(String s)
    指定されたStringのリテラル・パターンStringを返します。
    String[] split​(CharSequence input)
    このパターンのマッチに基づいて、指定された入力シーケンスを分割します。
    String[] split​(CharSequence input, int limit)
    このパターンのマッチに基づいて、指定された入力シーケンスを分割します。
    Stream<String> splitAsStream​(CharSequence input)
    このパターンのマッチに基づいて、指定された入力シーケンスからストリームを作成します。
    String toString()
    このパターンの文字列表現を返します。

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

    cloneequalsfinalizegetClasshashCodenotifynotifyAllwaitwaitwait
  • フィールド詳細

    • 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 Technical Standard#18: Unicode Regular Expression」の「Annex C: Compatibility Properties」に適合しています。

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

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

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

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

      たとえば、入力シーケンス「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
      関連項目:
      Matcher.find()
    • asMatchPredicate

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

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

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

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

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

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

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