Java 正規表現
正規表現とは
正規表現は、検索パターンを形成する文字の並びのことです。テキスト内のデータを検索する場合、この検索パターンを使用して検索対象を記述できます。
正規表現は、1文字の場合もあれば、より複雑なパターンの場合もあります。
正規表現は、あらゆるテキスト検索とテキスト置換を実行するために使用できます。
Java には組み込みの正規表現クラスがありませんが、java.util.regex
パッケージをインポートして正規表現を扱うことが可能です。パッケージには次のクラスが含まれています。
Pattern
クラス - パターンを定義 (検索で使用)Matcher
クラス - パターン検索に使用PatternSyntaxException
クラス - 正規表現パターンの構文エラーを示す
例
文中に「w3schools」という単語が出現するかどうかを調べます。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("techis", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit techis");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
// Outputs Match found
例の説明
この例では、「techis」という単語が文中で検索されています。
まず、Pattern.compile()
メソッドを使用してパターンを作成します。最初のパラメータは、検索対象のパターンを示し、2 番目のパラメータには、検索で大文字と小文字を区別しないことを示すフラグを持ちます。2番目のパラメータはオプションです。
matcher()
は、文字列内のパターンを検索するために使用されます。実行された検索に関する情報を含むMatcherオブジェクトを返します。
find()
メソッドは、文字列内にパターンが見つかった場合は true を返し、見つからなかった場合はfalseを返します。
フラグ
フラグのcompile()
メソッドは検索の実行方法を変更します。それらのいくつかを次に示します。
Pattern.CASE_INSENSITIVE
- 検索時に大文字と小文字は無視されます。Pattern.LITERAL
- パターン内の特殊文字には特別な意味を持たず、検索を実行するときに通常の文字として扱われます。Pattern.UNICODE_CASE
-CASE_INSENSITIVE
と併用すれば、アルファベット以外の文字の大文字と小文字も無視します。
正規表現パターン
Pattern.compile()
メソッドの最初のパラメータはパターンです。検索対象を記述します。
括弧は、文字の範囲を見つけるために使用されます。
表現 |
説明 |
---|---|
[abc] | 括弧で囲まれた文字から1文字を検索する |
[^abc] | 括弧の間にない1文字を検索する |
[0-9] | 0から9の範囲から1文字を検索する |
メタ文字
メタ文字は、特別な意味を持つ文字です。
メタ文字 |
説明 |
---|---|
| | cat | dog | fishのように、| で区切られたパターンのいずれかに一致するものを検索する |
. | 任意の文字のインスタンスを1つだけ検索する |
^ | ^Helloのように、文字列の先頭として同じものを検索する |
$ | World$のように、文字列の末尾で同じものを検索する |
\d | 数字を見つける |
\s | 空白文字を見つける |
\b | \bWORDように単語の先頭で一致するものを検索する 、WORD\bのように単語の末尾で一致するものを検索する |
\uxxxx | 16進数xxxxで指定されたUnicode文字を検索する |
数量詞
数量詞は量を定義します。
数量詞 |
説明 |
---|---|
n+ | n少なくとも1つを含む任意の文字列にマッチする |
n* | nが0回以上の出現を含む任意の文字列にマッチする |
n? | nが0回または 1 回の出現を含む任意の文字列にマッチする |
n{x} | nのxシーケンスを含む任意の文字列にマッチする |
n{x,y} | nのXからYのシーケンスを含む任意の文字列に一致します |
n{x,} | xの少なくともXのシーケンスを含む任意の文字列にマッチする |
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。