序文
この記事では、Javaの正規表現でパターンクラスとマッチャークラスを紹介します。まず、文字列として指定された正規表現をパターンクラスのインスタンスとしてまずコンパイルする必要があることを明確に理解する必要があります。したがって、これらの2つのクラスをよりよく理解する方法は、プログラマーが知っておくべきことです。
これらの2つのカテゴリを見てみましょう。
1。グループをキャプチャする概念
キャプチャグループは、左から右に開いたブラケットを計算することで番号を付けることができます。これは1で始まります。たとえば、式((a)(b(c)))には、そのようなグループが4つあります。
1((a)(b(c)))2(a)3(b(c))4(c)
グループゼロは常に表現全体を表します。 (?)から始まるグループは、テキストをキャプチャせず、コンボカウントにカウントしない純粋な非キャプチャグループです。
グループに関連付けられたキャプチャ入力は、常に最近のグループに一致するサブシーケンスです。量子化のためにグループが再度計算された場合、その以前にキャプチャされた値は2番目の計算障害(ある場合)で保持されます。たとえば、文字列「ABA」を式(a(b)?)+に一致させると、2番目のグループが「b」に設定されます。各試合の開始時に、すべてのキャプチャされた入力が破棄されます。
2。パターンとマッチャーのクラスの詳細な説明
Javaの正規表現は、java.util.regexパッケージの下のパターンクラスとマッチャークラスを通じて実装されます(この記事を読むときにJava APIドキュメントを開くことをお勧めします。どの方法を紹介するときに、Java APIでメソッドの説明を確認すると、効果が良くなります)。
パターンクラスは、正規表現を作成するために使用されるか、マッチングパターンを作成すると言えます。そのコンストラクターはプライベートであり、直接作成することはできませんが、 Pattern.complie(String regex)
Javaコードの例:
パターンP = pattern.compile( "// w+"); p.pattern(); // return/w+
pattern()正規表現の文字列形式を返します。これは実際にはPattern.complile(String regex)の正規表現パラメーターです
1.pattern.split(charsequence input)
パターンには、文字列を分離して文字列[]を返すために使用されるsplit(CharSequence input)メソッドがあります。 String.split(String regex) Pattern.split(CharSequence input)を介して実装されていると思います。
Javaコードの例:
パターンP = pattern.compile( "// d+"); string [] str = p.split( "私のqqは:456456私の電話は:0532214私のメールは:[email protected]");
結果:str [0] = "私のqqは:" str [1] = "私の電話は:" str [2] = "私のメールは:[email protected]"
2。pattern.Matcher(String Regex、Charsequence入力)は、文字列を迅速に一致させるために使用される静的な方法です。この方法は、すべての文字列を一致させ、一致させるのに適しています。
Javaコードの例:
pattern.matches( "// d+"、 "2223"); // true pattern.matches( "// d+"、 "2223aa"); // return true pattern。
3.pattern.matcher(charquence input)
多くのことを言った後、それはついにマッチャークラスのデビューの番です。 Pattern.matcher(CharSequence input)マッチャーオブジェクトを返します。
Matcherクラスのコンストラクター方法もプライベートであり、自由に作成することはできません。 Pattern.matcher(CharSequence input)メソッドを使用して、このクラスのインスタンスのみを取得できます。
パターンクラスは、いくつかの簡単なマッチング操作のみを行うことができます。より強力でより便利な通常のマッチング操作を得るには、パターンとマッチャーに協力する必要があります。 Matcherクラスは、正規表現のグループサポートと、正規表現の複数のマッチングサポートを提供します。
Javaコードの例:
パターンP = pattern.compile( "// d+"); Matcher M = P.Matcher( "22BB23"); m.pattern(); // pを返すpを返すパターンオブジェクトは、マッチャーオブジェクトによって作成されたものです。
4.matcher.matches()/matcher.lookingat()/matcher.find()
Matcherクラスは、3つのマッチング操作方法を提供します。 3つのメソッドはすべて、ブールタイプを返します。試合に到達したらtrueを返します。一致がない場合、それは虚偽を返します。
matches()文字列全体に一致し、文字列全体が一致する場合にのみtrueを返します
Javaコードの例:
パターンP = pattern.compile( "// d+"); Matcher M = P.Matcher( "22BB23"); m.matches(); // falseを返します。これは、bbを/d+で一致させることができないため、文字列全体の一致が失敗します。 Matcher M2 = P.Matcher( "2223"); m2.matches(); ///d+が文字列全体と一致するため、trueを返します
Pattern.matcher(String regex,CharSequence input)を振り返ってみましょう。これは次のコードに相当しますPattern.compile(regex).matcher(input).matches()
lookingAt()前の文字列と一致し、一致する文字列が正面にある場合にのみtrueを返します。
Javaコードの例:
パターンP = pattern.compile( "// d+"); Matcher M = P.Matcher( "22BB23"); m.logoingat(); // trueを返します。これは、/d+が前の22マッチャーm2 = p.matcher( "aa2223")と一致するためです。 m2.lookingat(); ///d+が以前のAAと一致できないため、falseを返します
stringと一致するfind() 、一致する文字列はどこにでもあります。
Javaコードの例:
パターンP = pattern.compile( "// d+"); Matcher M = P.Matcher( "22BB23"); M.Find(); // True Matcher M2 = P.Matcher( "aa2223")を返す; m2.find(); // true matcher m3 = p.matcher( "aa2223bb"); m3.find(); // true matcher m4 = p.matcher( "aabb")を返す; m4.find(); // falseを返します
5.mathcer.start()/matcher.end()/matcher.group()
matches() 、 lookingAt() 、およびfind()を使用してマッチング操作を実行した後、上記の3つの方法を使用して、より詳細な情報を取得できます。
start() stringの一致するサブストリングのインデックス位置を返します。
end() stringの一致したサブストリングの最後の文字のインデックス位置を返します。
group()一致するサブストリングを返します
Javaコードの例:
パターンP = pattern.compile( "// d+"); Matcher M = P.Matcher( "aaa2223bb"); m.find(); // match 2223 m.start(); // return 3 m.end(); // return 7、2223 m.group(); // return 2223 mathcer m2 = m.matcher( "2223bb"); m.loisotat(); // 2223 M.Start(); // return 0、sheedat()は以前の文字列のみを一致させることができるため、sheedat()を使用して一致する場合、start()メソッドは常に0 m.end()を返します。 // 4 m.group();を返します。 // 2223 Matcher M3 = M.Matcher( "2223BB"); M.Matches(); //文字列全体を一致させるM.Start(); // 0を返し、誰もがm.end()の理由を知っていると思います。 // 6を返します、私は誰もが理由を知っていると思います。 // 2223bbを返します
多くのことを言って、私は誰もが上記の方法の使用を理解していると信じています。 Javaで正規表現のグループ化がどのように使用されるかについて話す必要があります。
start() 、 end() 、およびgroup()それらはstart(int i) 、 end(int i) 、 group(int i)特別にグループ操作のためです。 Mathcerクラスには、グループの数を返すgroupCount()もあります。
Javaコードの例:
パターンP = pattern.compile( "([az]+)(// d+)"); Matcher M = P.Matcher( "aaa2223bb"); M.Find(); // aaa2223 m.groupcount(); // M.Start(1)の2つのグループがあるため、2を返します。 // return 0 string m.start(2)の一致したサブストリングの最初のグループのインデックス番号を返します。 // 3 m.end(1)を返します。 // 3を返します。文字列内の一致したサブストリングの最初のグループの最後の文字のインデックス位置を返します。 M.END(2); // 7 M.Group(1)を返します。 // AAAを返し、一致したサブストリングスM.Group(2)の最初のグループを返します。 // 2223を返し、一致するサブストリングの2番目のセットを返します
ここで、わずかに高レベルの通常のマッチング操作を使用してみましょう。たとえば、多くの数字が入ったテキストがあり、これらの数字は分離されています。次に、テキスト内のすべての数字を取り出す必要があります。 Javaの通常の運用を使用するのはとても簡単です。
Javaコードの例:
パターンP = pattern.compile( "// d+"); Matcher M = P.Matcher( "私のQQは:456456私の電話は:0532214私のメールは:[email protected]"); while(m.find()){system.out.println(m.group()); }
出力:
456456 0532214 123
上記のwhile()ループを置き換える場合
while(m.find()){system.out.println(m.group()); System.out.print( "start:"+m.start()); system.out.println( "end:"+m.end()); }次に出力:
456456 Start:6 End:12 0532214 Start:19 End:26 123 Start:36 End:39
一致する各操作の後、3つのメソッドの値がstart() 、 end() 、およびgroup()値が変更され、一致するサブストリングの情報に変更され、それらの過負荷方法も対応する情報に変更されることを誰もが知っている必要があります。
注:マッチング操作が成功した場合にのみ、3つのメソッドstart() 、 end() matches()およびgroup() find()を使用できます。そうでlookingAt()ば、 java.lang.IllegalStateExceptionスローされます。
要約します
上記はこの記事のすべての内容です。この記事の内容があなたの研究や仕事に役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。