|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.regex.Matcher
public final class Matcher
Pattern
を解釈することによってjava.lang.CharSequence
文字シーケンスのマッチ操作を行うエンジンです。
正規表現エンジンは、パターンの matcher
メソッドを呼び出すことによって作成されます。一度作成すると、次の 3 種類のマッチ操作に使用できます。
matches
メソッドは、入力シーケンス全体とパターンをマッチする
lookingAt
メソッドは、入力シーケンスの先頭から始めてパターンをマッチする
find
メソッドは、入力シーケンスを走査して、パターンとマッチする次の部分シーケンスを検索する
これらのメソッドは、マッチが成功したかどうかを示す boolean 値を返します。マッチが成功したときは、正規表現エンジンの状態を照会すれば詳細を取得できます。
正規検索エンジンは「領域」と呼ばれる入力のサブセットでマッチを検索します。デフォルトでは、領域には正規検索エンジンの入力すべてが含まれます。領域の変更には region
メソッドを、領域の照会には regionStart
および regionEnd
メソッドを使用できます。領域の境界による一定のパターン作成の方法は変更できます。詳細については、useAnchoringBounds
および useTransparentBounds
を参照してください。
このクラスには、マッチした部分シーケンスを新しい文字列に置換するメソッドも定義します。 新しい文字列の内容は、必要に応じてマッチ結果から算出できます。appendReplacement
および appendTail
メソッドを同時に使用すれば、マッチ結果を収集して既存の文字列バッファーに格納できます。 また、replaceAll
メソッドを使用すれば、入力シーケンス内でマッチした部分シーケンスがすべて置換された文字列を作成できます。
正規表現エンジンの明示的な状態として、最後に成功したマッチの開始インデックスと終了インデックスがあります。また、パターンの各前方参照を行う正規表現グループによって前方参照された入力部分シーケンスの開始インデックスと終了インデックスや、前方参照された部分シーケンスの総数も利用されます。前方参照された部分シーケンスを文字列形式で返すメソッドも用意されています。
正規表現エンジンの明示的な状態の初期値は定義されていません。 マッチが成功する前にその一部を照会しようとすると、IllegalStateException
がスローされます。正規表現エンジンの明示的な状態は、マッチ操作のたびに計算し直されます。
正規表現エンジンの暗黙的な状態には、入力文字シーケンスや「追加位置」があります。 追加位置の初期値はゼロで、appendReplacement
メソッドによって更新されます。
正規表現エンジンをリセットするには、正規表現エンジンの reset()
メソッドまたは reset(CharSequence)
メソッド (新しい入力シーケンスが必要な場合) を呼び出します。正規表現エンジンをリセットすると、その明示的な状態に関する情報が破棄され、追加位置がゼロに設定されます。
このクラスのインスタンスは、複数のスレッドで並行して使用することはできません。
メソッドの概要 | |
---|---|
Matcher |
appendReplacement(StringBuffer sb,
String replacement)
継続追加置換手順を実装します。 |
StringBuffer |
appendTail(StringBuffer sb)
終了追加置換手順を実装します。 |
int |
end()
最後にマッチした文字の後のオフセットを返します。 |
int |
end(int group)
前回のマッチ操作で指定されたグループによって前方参照された部分シーケンスの、最終文字の後のオフセットを返します。 |
boolean |
find()
入力シーケンスからこのパターンとマッチする次の部分シーケンスを検索します。 |
boolean |
find(int start)
この正規表現エンジンをリセットし、指定されたインデックス以降の入力シーケンスから、このパターンとマッチする次の部分シーケンスを検索します。 |
String |
group()
前回のマッチで一致した入力部分シーケンスを返します。 |
String |
group(int group)
前回のマッチ操作で指定されたグループによって前方参照された入力部分シーケンスを返します。 |
int |
groupCount()
この正規表現エンジンのパターンに指定されている前方参照を行う正規表現グループの数を返します。 |
boolean |
hasAnchoringBounds()
この正規表現エンジンの領域境界のアンカー設定を問い合わせるクエリーを出します。 |
boolean |
hasTransparentBounds()
この正規表現エンジンの領域境界の透明度を問い合わせるクエリーを出します。 |
boolean |
hitEnd()
この正規検索エンジンが実行した最後のマッチ操作で、入力の末尾が検索エンジンによりヒットした場合に、true を返します。 |
boolean |
lookingAt()
入力シーケンスとパターンとのマッチを、領域の先頭から始めます。 |
boolean |
matches()
領域全体をこのパターンとマッチします。 |
Pattern |
pattern()
この正規表現エンジンによって解釈されるパターンを返します。 |
static String |
quoteReplacement(String s)
指定された String のリテラル置換 String を返します。 |
Matcher |
region(int start,
int end)
正規検索エンジンの領域に制限を設定します。 |
int |
regionEnd()
この正規検索エンジンの領域の終了インデックス (その値を含まない) をレポートします。 |
int |
regionStart()
この正規検索エンジンの領域の開始インデックスをレポートします。 |
String |
replaceAll(String replacement)
パターンとマッチする入力シーケンスの部分シーケンスを、指定された置換文字列に置き換えます。 |
String |
replaceFirst(String replacement)
パターンとマッチする入力シーケンスの部分シーケンスのうち、最初の部分シーケンスを指定された置換文字列に置き換えます。 |
boolean |
requireEnd()
より多くの入力で正のマッチが負のマッチに変更される可能性がある場合に、true を返します。 |
Matcher |
reset()
この正規表現エンジンをリセットします。 |
Matcher |
reset(CharSequence input)
新しい入力シーケンスを使用してこの正規表現エンジンをリセットします。 |
int |
start()
前回のマッチの開始インデックスを返します。 |
int |
start(int group)
前回のマッチ操作で指定されたグループによって前方参照された部分シーケンスの、開始インデックスを返します。 |
MatchResult |
toMatchResult()
この正規表現エンジンのマッチ状態を MatchResult として返します。 |
String |
toString()
この正規表現エンジンの文字列表現を返します。 |
Matcher |
useAnchoringBounds(boolean b)
この正規表現エンジンの領域境界のアンカーを設定します。 |
Matcher |
usePattern(Pattern newPattern)
この Matcher がマッチ検索に使用する Pattern を変更します。 |
Matcher |
useTransparentBounds(boolean b)
この正規表現エンジンの領域境界の透明度を設定します。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
メソッドの詳細 |
---|
public Pattern pattern()
public MatchResult toMatchResult()
MatchResult
として返します。結果は、この正規検索エンジンに対する後続の操作の影響を受けません。
MatchResult
public Matcher usePattern(Pattern newPattern)
このメソッドを使用すると、最後に発生したマッチのグループに関する情報がこの正規表現エンジンから失われます。入力内の正規表現エンジンの位置は維持され、最後の追加位置は影響を受けません。
newPattern
- この正規表現エンジンが使用する新規パターン
IllegalArgumentException
- newPattern が null の場合public Matcher reset()
正規検索エンジンをリセットすると、明示的な状態情報すべてが破棄され、追加位置がゼロに設定されます。正規検索エンジンの領域は、デフォルトである文字シーケンス全体に設定されます。この正規表現エンジンの領域境界のアンカーおよび透明度は影響を受けません。
public Matcher reset(CharSequence input)
正規検索エンジンをリセットすると、明示的な状態情報すべてが破棄され、追加位置がゼロに設定されます。正規検索エンジンの領域は、デフォルトである文字シーケンス全体に設定されます。この正規表現エンジンの領域境界のアンカーおよび透明度は影響を受けません。
input
- 新しい入力文字シーケンス
public int start()
MatchResult
内の start
IllegalStateException
- マッチがまだ試みられていない場合、または前回のマッチ操作が失敗した場合public int start(int group)
前方参照を行う正規表現グループには、左から右方向に 1 からインデックスが付きます。グループ 0 はパターン全体を表します。 つまり、m.start(0) と m.start() は同じ表現です。
MatchResult
内の start
group
- この正規表現エンジンのパターンに指定されている前方参照を行う正規表現グループのインデックス
IllegalStateException
- マッチがまだ試みられていない場合、または前回のマッチ操作が失敗した場合
IndexOutOfBoundsException
- 指定されたインデックスを持つ前方参照を行う正規表現グループがそのパターンに含まれない場合public int end()
MatchResult
内の end
IllegalStateException
- マッチがまだ試みられていない場合、または前回のマッチ操作が失敗した場合public int end(int group)
前方参照を行う正規表現グループには、左から右方向に 1 からインデックスが付きます。グループ 0 はパターン全体を表します。 つまり、m.end(0) と m.end() は同じ表現です。
MatchResult
内の end
group
- この正規表現エンジンのパターンに指定されている前方参照を行う正規表現グループのインデックス
IllegalStateException
- マッチがまだ試みられていない場合、または前回のマッチ操作が失敗した場合
IndexOutOfBoundsException
- 指定されたインデックスを持つ前方参照を行う正規表現グループがそのパターンに含まれない場合public String group()
正規表現エンジン m に入力シーケンス s が指定されている場合、m.group() と s.substring(m.start(), m.end()) は同じ表現になります。
パターン (a* など) によっては、空の文字列とマッチすることがあります。これらのパターンが入力シーケンス内の空の文字列とマッチした場合、空の文字列が返されます。
MatchResult
内の group
IllegalStateException
- マッチがまだ試みられていない場合、または前回のマッチ操作が失敗した場合public String group(int group)
正規表現エンジン m、入力シーケンス s、およびグループインデックス g が指定されている場合、m.group(g) と s.substring(m.start(g), m.end(g)) は同じ表現になります。
前方参照を行う正規表現グループには、左から右方向に 1 からインデックスが付きます。グループ 0 はパターン全体を表します。 つまり、m.group(0) と m.group() は同じ表現です。
マッチは正常終了したが、指定されたグループが入力シーケンスに検出されなかった場合、null が返されます。パターン ((a*) など) によっては、空の文字列とマッチすることがあります。これらのグループが入力シーケンス内の空の文字列とマッチした場合、空の文字列が返されます。
MatchResult
内の group
group
- この正規表現エンジンのパターンに指定されている前方参照を行う正規表現グループのインデックス
IllegalStateException
- マッチがまだ試みられていない場合、または前回のマッチ操作が失敗した場合
IndexOutOfBoundsException
- 指定されたインデックスを持つ前方参照を行う正規表現グループがそのパターンに含まれない場合public int groupCount()
グループ 0 はパターン全体を表します。グループ 0 は、このカウントに含まれません。
グループインデックスがこのメソッドから返された値以下の正の整数である場合は、この正規表現エンジンで有効です。
MatchResult
内の groupCount
public boolean matches()
マッチが成功した場合は、start、end、および group メソッドを使用して詳細情報を取得できます。
public boolean find()
このメソッドは、正規検索エンジンの領域の先頭から開始されます。 ただし、前回の呼び出しが正常に終了してから正規表現エンジンがリセットされていない場合は、前回のマッチで一致しなかった最初の文字から開始されます。
マッチが成功した場合は、start、end、および group メソッドを使用して詳細情報を取得できます。
public boolean find(int start)
マッチが成功した場合は、start、end、および group メソッドを使用して詳細情報を取得できます。 後続の find()
メソッド呼び出しでは、このマッチで一致しなかった最初の文字から開始されます。
IndexOutOfBoundsException
- start がゼロより小さい場合、または start が入力シーケンスの長さより大きい場合public boolean lookingAt()
matches
メソッドと同様に、領域の先頭から開始されます。 ただし、領域全体がマッチする必要はありません。
マッチが成功した場合は、start、end、および group メソッドを使用して詳細情報を取得できます。
public static String quoteReplacement(String s)
String
のリテラル置換 String
を返します。
このメソッドは、Matcher
クラスの appendReplacement
メソッド内のリテラル置換 s
として機能する String
を生成します。生成される String
は、リテラルシーケンスとして処理される s
内の文字シーケンスにマッチします。スラッシュ ('\') およびドル記号 ('$') には特別な意味はありません。
s
- リテラル化する文字列
public Matcher appendReplacement(StringBuffer sb, String replacement)
このメソッドは、次の処理を実行します。
追加位置以降の入力シーケンスから文字列を読み込み、指定された文字列バッファーに追加する。前回マッチした文字の直前の文字、つまりインデックス start()
- 1 の文字を読み込んだときに終了する
指定された置換文字列を文字列バッファーに追加する
この正規表現エンジンの追加位置を、最後にマッチした文字のインデックスに 1 を加えた値、つまり end()
に設定する
置換文字列には、前回のマッチ時に前方参照された部分シーケンスへの参照が含まれる場合があります。$g が検出されると、group
(g) を評価した結果にすべて置換されます。$ の後の最初の数値は、常にグループ参照の一部として処理されます。後続の数値が正当なグループ参照を構成する場合、これらは g に組み込まれます。数 0 〜 9 だけが、グループ参照の潜在的なコンポーネントと見なされます。たとえば、2 番目のグループが文字列 "foo" にマッチすると、置換文字列 "$2bar" の引き渡しが行われて、"foobar" が文字列バッファーに追加されます。前にバックスラッシュ (\$) を付けることで、ドル記号 ($) をリテラルとして置換文字列に含めることができます。
置換文字列内でバックスラッシュ (\) とドル記号 ($) を使用すると、それをリテラル置換文字列として処理した場合とは結果が異なる場合があります。ドル記号は、先に説明したとおり、前方参照された部分シーケンスへの参照として処理される場合があり、バックスラッシュは置換文字列内のリテラル文字をエスケープするのに使用されます。
このメソッドは、ループ内で appendTail
メソッドおよび find
メソッドと組み合わせて使用します。たとえば、次のコードでは、one dog two dogs in the yard を標準出力ストリームに書き出します。
Pattern p = Pattern.compile("cat"); Matcher m = p.matcher("one cat two cats in the yard"); StringBuffer sb = new StringBuffer(); while (m.find()) { m.appendReplacement(sb, "dog"); } m.appendTail(sb); System.out.println(sb.toString());
sb
- ターゲット文字列バッファーreplacement
- 置換文字列
IllegalStateException
- マッチがまだ試みられていない場合、または前回のマッチ操作が失敗した場合
IndexOutOfBoundsException
- 置換文字列が参照している前方参照を行う正規表現グループが、パターン内に存在しない場合public StringBuffer appendTail(StringBuffer sb)
このメソッドは、追加位置以降の入力シーケンスから文字列を読み込み、指定された文字列バッファーに追加します。入力シーケンスの残りの部分をコピーするために、appendReplacement
メソッドを 1 回以上呼び出してからこのメソッドを呼び出します。
sb
- ターゲット文字列バッファー
public String replaceAll(String replacement)
このメソッドはまず、この正規表現エンジンをリセットします。次に、入力シーケンスを走査して、パターンとマッチする文字列を検索します。パターンとマッチしない文字列は、結果文字列に直接追加されます。 パターンとマッチした文字列は、置換文字列に置換されて結果に追加されます。appendReplacement
メソッドと同様に、前方参照された部分シーケンスへの参照が置換文字列に含まれる場合があります。
置換文字列内でバックスラッシュ (\) とドル記号 ($) を使用すると、それをリテラル置換文字列として処理した場合とは結果が異なる場合があります。ドル記号は、先に説明したとおり、前方参照された部分シーケンスへの参照として処理される場合があり、バックスラッシュは置換文字列内のリテラル文字をエスケープするのに使用されます。
正規表現 a*b、入力 "aabfooaabfooabfoob"、および置換文字列 "-" を指定した場合、その表現の正規表現エンジン上でこのメソッドを呼び出すと、文字列 "-foo-foo-foo-" が生成されます。
このメソッドを呼び出すと、この正規表現エンジンの状態が変わります。この正規表現エンジンを後続のマッチ操作で使用する場合は、最初に正規表現エンジンをリセットする必要があります。
replacement
- 置換文字列
public String replaceFirst(String replacement)
このメソッドはまず、この正規表現エンジンをリセットします。次に、入力シーケンスを走査して、パターンとマッチする最初の文字列を検索します。パターンとマッチしない文字列は、結果文字列に直接追加されます。 パターンとマッチした文字列は、置換文字列に置換されて結果に追加されます。appendReplacement
メソッドと同様に、前方参照された部分シーケンスへの参照が置換文字列に含まれる場合があります。
置換文字列内でバックスラッシュ (\) とドル記号 ($) を使用すると、それをリテラル置換文字列として処理した場合とは結果が異なる場合があります。ドル記号は、先に説明したとおり、前方参照された部分シーケンスへの参照として処理される場合があり、バックスラッシュは置換文字列内のリテラル文字をエスケープするのに使用されます。
正規表現 dog、入力 "zzzdogzzzdogzzz"、および置換文字列 "cat" を指定した場合、その表現の正規表現エンジン上でこのメソッドを呼び出すと、文字列 "zzzcatzzzdogzzz" が生成されます。
このメソッドを呼び出すと、この正規表現エンジンの状態が変わります。この正規表現エンジンを後続のマッチ操作で使用する場合は、最初に正規表現エンジンをリセットする必要があります。
replacement
- 置換文字列
public Matcher region(int start, int end)
start
パラメータにより指定されたインデックスに、領域の末尾が end
パラメータにより指定されたインデックスにそれぞれ設定されます。
使用される透明度とアンカー設定によっては (useTransparentBounds
および useAnchoringBounds
を参照)、アンカーなどの特定の作成上の振る舞いが領域の境界またはその付近で異なる場合があります。
start
- 検索を開始する位置のインデックス (その値も含む)end
- 検索を終了する位置のインデックス (その値を含まない)
IndexOutOfBoundsException
- start または end がゼロより小さい場合、start が入力シーケンスの長さより大きい場合、end が入力シーケンスの長さより大きい場合、または start が end より大きい場合public int regionStart()
regionStart
(その値も含む) と regionEnd
(その値を含まない) の内部でのマッチ検索に制限されます。
public int regionEnd()
regionStart
(その値も含む) と regionEnd
(その値を含まない) の内部でのマッチ検索に制限されます。
public boolean hasTransparentBounds()
このメソッドは、transparent 境界がこの正規表現エンジンで使用される場合は true を返し、opaque 境界が使用される場合には false を返します。
透明または不透明の境界の詳細については、useTransparentBounds
を参照してください。
デフォルトでは、正規表現エンジンは不透明の領域境界を使用します。
useTransparentBounds(boolean)
public Matcher useTransparentBounds(boolean b)
このメソッドに true の引数を指定して呼び出すと、transparent 境界がこの正規表現エンジンで使用されます。boolean 引数が false の場合は、opaque 境界が使用されます。
透明な境界を使用する場合、この正規表現エンジンの領域は、前方、後方、および境界のマッチング作成で透明になります。これらの作成は、マッチが適切かどうかを領域の境界を超えて見ることができます。
不透明な境界を使用すると、この正規表現エンジンの境界は、前方、後方、および境界を超えて検索を試みるマッチング作成で不透明となります。これらの作成では境界を以前にさかのぼって検索できないため、領域外ではいかなるマッチングも失敗します。
デフォルトでは、正規表現エンジンは不透明の境界を使用します。
b
- 不透明または透明の領域のどちらを使用するかを示す boolean
hasTransparentBounds()
public boolean hasAnchoringBounds()
このメソッドは、anchoring 境界がこの正規表現エンジンで使用される場合は true を返し、そうでない場合は false を返します。
アンカー設定境界の詳細については、 useTransparentBounds
を参照してください。
デフォルトでは、正規表現エンジンはアンカー設定領域境界を使用します。
useAnchoringBounds(boolean)
public Matcher useAnchoringBounds(boolean b)
このメソッドに true の引数を指定して呼び出すと、anchoring 境界がこの正規表現エンジンで使用されます。boolean 引数が false の場合は、non-anchoring 境界が使用されます。
アンカー設定境界が使用されると、この正規表現エンジンの領域の境界は、 ^ および $ などのアンカーにマッチします。
アンカー設定境界が使用されない場合は、この正規表現エンジンの領域の境界は、 ^ および $ などのアンカーにマッチしません。
デフォルトでは、正規表現エンジンはアンカー設定領域境界を使用します。
b
- アンカー設定境界を使用するかどうかを示す boolean
hasAnchoringBounds()
public String toString()
この正規表現エンジンの文字列表現を返します。Matcher
の文字列表現には、デバッグに有用な情報が含まれます。厳密な書式は指定されません。
Object
内の toString
public boolean hitEnd()
この正規検索エンジンが実行した最後のマッチ操作で、入力の末尾が検索エンジンによりヒットした場合に、true を返します。
このメソッドが true を返す場合、入力がさらに多ければ、最後の検索の結果が変更された可能性があります。
public boolean requireEnd()
より多くの入力で正のマッチが負のマッチに変更される可能性がある場合に、true を返します。
このメソッドが true を返し、かつマッチが検出された場合、より多くの入力があればマッチが失われた可能性があります。このメソッドが false を返し、かつマッチが検出された場合、より多くの入力があればマッチは変更されるが、失われることはなかった可能性があります。マッチが検出されなかった場合、requireEnd に意味はありません。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。