正規表現は、テキスト (Java では文字列) に適用できるパターンの一種です。Java では、正規表現を照合するためのjava.util.regexパッケージが提供されています。正規表現は Perl プログラミング言語に非常に似ており、習得が非常に簡単です。正規表現は、テキスト (その一部) と一致するかどうかのいずれかです。* 正規表現がテキストの一部と一致する場合、それを見つけることができます。** 正規表現が複合である場合、正規表現のどの部分がテキストのどの部分と一致するかを簡単に把握できます。
最初の例
正規表現「[a-z] +
」は、テキスト内のすべての小文字と一致します。 はからまでの任意[a-z]
の文字を意味し、「1 つ以上の」文字を意味します。「コード 2 学習 Java チュートリアル」という文字列を指定すると仮定します。Java でこれを行う方法 まず、テンプレートを作成する必要があります。 a
z
+
import java.util.regex.*;
Pattern p = Pattern.compile(“[a-z]+”);
matcher
次に、図上にメッセージを送信してテキストを 作成する必要があります。
Matcher m = p.matcher(“code 2 learn java tutorial”);
注: どちらにもコンストラクターはありませんPattern
。Matcher
クラス メソッドを使用して作成しますPattern
。 Pattern Class:
クラス オブジェクトは正規表現の表現を構成します。Pattern クラスはパブリック コンストラクターを提供しません。テンプレートを作成するには、まずパブリック静的メソッドの 1 つを呼び出す必要があります。その後、クラスのオブジェクトが返されますPattern
。これらのメソッドは引数として正規表現を受け取ります。 Matcher Class:
Finder オブジェクトは、パターンを解釈し、入力文字列に対して照合操作を実行するエンジンです。Pattern
クラスと同様に、Matcher
パブリック コンストラクターはありません。オブジェクトを取得するには、クラス オブジェクトのMatcher
メソッドを呼び出します。これらの手順を完了し、 クラス のインスタンスを取得したら、パターンが見つかったかどうか、見つかった場合はどの位置にあるかなどを確認できます。 パターンが文字列全体に一致する場合は true を返し、そうでない場合は false を返します。 パターンが文字列の先頭に一致する場合は true を返し、そうでない場合は false を返します。 パターンがテキストの一部と一致する場合は true を返します。 matcher
Pattern
Matcher m
m.matches()
m.lookingAt()
m.find ()
他に読むべきもの: |
---|
一致する相手を見つける
一致が成功すると、m.start() は一致した最初の文字のインデックスを返し、m.end() は一致した最後の文字のインデックスに 1 を加えた値を返します。試行が失敗し、一致するものが見つからなかった場合は、m.start()
スローm.end()
されます。IllegalStateException
- こうする
RuntimeException
ことで捕まえる必要がなくなります。
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)
ファインダーをリセットし、新しいテキスト (おそらくString
、StringBuffer
または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|b
a または 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 で始まる引用は終了します。
GO TO FULL VERSION