JavaRush /Java Blog /Random-JA /Java の正規表現
terranum
レベル 28
Milan

Java の正規表現

Random-JA グループに公開済み
正規表現正規表現は、テキスト (Java では文字列) に適用できるパターンの一種です。Java では、正規表現を照合するためのjava.util.regexパッケージが提供されています。正規表現は Perl プログラミング言語に非常に似ており、習得が非常に簡単です。正規表現は、テキスト (その一部) と一致するかどうかのいずれかです。* 正規表現がテキストの一部と一致する場合、それを見つけることができます。** 正規表現が複合である場合、正規表現のどの部分がテキストのどの部分と一致するかを簡単に把握できます。

最初の例

正規表現「[a-z] +」は、テキスト内のすべての小文字と一致します。 はからまでの任意[a-z]の文字を意味し、「1 つ以上の」文字を意味します。「コード 2 学習 Java チュートリアル」という文字列を指定すると仮定します。Java でこれを行う方法 まず、テンプレートを作成する必要があります。 az+
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
matcher次に、図上にメッセージを送信してテキストを 作成する必要があります。
Matcher m = p.matcher(“code 2 learn java tutorial”);
注: どちらにもコンストラクターはありませんPatternMatcherクラス メソッドを使用して作成しますPatternPattern Class:クラス オブジェクトは正規表現の表現を構成します。Pattern クラスはパブリック コンストラクターを提供しません。テンプレートを作成するには、まずパブリック静的メソッドの 1 つを呼び出す必要があります。その後、クラスのオブジェクトが返されますPattern。これらのメソッドは引数として正規表現を受け取ります。 Matcher Class:Finder オブジェクトは、パターンを解釈し、入力文字列に対して照合操作を実行するエンジンです。Patternクラスと同様に、Matcherパブリック コンストラクターはありません。オブジェクトを取得するには、クラス オブジェクトのMatcherメソッドを呼び出します。これらの手順を完了し、 クラス のインスタンスを取得したら、パターンが見つかったかどうか、見つかった場合はどの位置にあるかなどを確認できます。 パターンが文字列全体に一致する場合は true を返し、そうでない場合は false を返します。 パターンが文字列の先頭に一致する場合は true を返し、そうでない場合は false を返します。 パターンがテキストの一部と一致する場合は true を返します。 matcherPatternMatcher m m.matches()m.lookingAt()m.find ()

一致する相手を見つける

一致が成功すると、m.start() は一致した最初の文字のインデックスを返し、m.end() は一致した最後の文字のインデックスに 1 を加えた値を返します。試行が失敗し、一致するものが見つからなかった場合は、m.start()スローm.end()されます。IllegalStateException
  • こうするRuntimeExceptionことで捕まえる必要がなくなります。
最後に一致した文字のインデックスに 1 を加えた値を返すのは奇妙に思えるかもしれませんがm.end()、ほとんどのString.
  • 例えば、“Now is the time“.substring(m.start(), m.end())
同じ文字列を返します。コードを見てみましょう:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

追加のメソッド

一致するものがあれば、次のようになります。
  • m.replaceFirst(replacement)新しい文字列を返します。パターンに一致する最初の部分文字列が次の文字列に置き換えられます。replacement
  • m.replaceAll(replacement)新しい文字列を返します。パターンに一致する各部分文字列が置き換えられます。
  • m.find(StartIndex)指定されたインデックスから始まる次の一致を検索します
  • m.reset()テンプレートをリセットします
  • m.reset(NewText)ファインダーをリセットし、新しいテキスト (おそらくStringStringBufferまたはCharBuffer)を与えます。

正規表現の構文

  • ^行の先頭と一致します。
  • $文字列の末尾と一致します。
  • .改行を除く任意の 1 文字と一致します。m オプションを使用すると、改行と一致させることができます。
  • [...]括弧内の任意の 1 文字と一致します。
  • [^ ...]括弧内にない任意の 1 文字と一致します。
  • \Aライン全体を開始します。
  • \z行全体の終わり。
  • \Z最後の行終端文字を除く行全体の終わり。
  • re*前述の式の 0 回以上の出現と一致します。
  • re+前の式の 1 つ以上の一致。
  • re?0 または 1 を前の式の位置と照合します。
  • re{n}完全に一致 N 前述の式の出現回数。
  • re{n,}前述の式の N 回以上の出現と一致します。
  • re{n, m}前の式の少なくとも n 回、最大 m 回の出現と一致します。
  • a|ba または b に一致します。
  • (re)正規表現のグループと、見つかったテキストを記憶します。
  • (?: re)見つかったテキストを覚えていない正規表現のグループ。
  • (?> re)リターンなしで独立したパターンに一致します。
  • \w文字と数字 [a-zA-Z_0-9] に一致します。
  • \Wこれらは文字や数字ではありません。
  • \sスペースに一致します。[\t\n\r\f] と同等。
  • \S空白文字ではありません。
  • \d数字が一致します。[0-9]に相当します。
  • \D数字が一致しません。
  • \G最後の試合のポイントと一致します。
  • \n改行と一致します。
  • \b単語境界で一致します。
  • \B単語境界上では一致しません。
  • \n, \t, etc.改行、復帰、タブなどの文字。
  • \Q\E の前の文字はすべて引用符で囲みます。
  • \E\Q で始まる引用は終了します。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION