【エンジニア向け】Javaの良く使う正規表現を纏めてみた

今回は、Java正規表現について使い方を纏めてみました。

Javaを勉強するなら、以下の本がオススメです。

すっきりわかるJava入門第3段

スッキリわかるJava入門第3版 [ 中山清喬 ]

価格:2,860円
(2021/4/18 21:19時点)
感想(3件)

Javaの正規表現チェック

どのような正規表現ルールがあるかを確認する前に、正規表現をチェックするメソッドを確認しておきましょう。

操作メソッド
文字列が、指定された正規表現と一致するかどうかを判定public boolean matches(String regex)

“Hello”という文字で正規表現チェックを使ってみましょう。

String str = "Hello";
str.matches("Hello"); // ⬅︎ True
str.matches("abcd"); // ⬅︎ False
str.matches("hello"); // ⬅︎ False

上記の例から分かる通り、「Hello」という文字で検索した時のみ、一致(True)が返却されました。

良く使う正規表現

今度は、良く使う以下2つの正規表現でチェックを行ってみましょう

正規表現意味
.任意の1文字が存在する
*直前の文字が0回以上繰り返して存在する

では、「.」を使ったソースコードで見てみましょう

// . を使うって任意の文字を正規表現で判定
"Hello".matches("H.llo");  // ⬅︎ True

上記の例では、「.」を使って「Hello」の「e」の部分を任意の文字で正規表現しました。

この例を使えば「Hallo」、「Hillo」 、「Hollo」など、「e」以外の文字で判定してもTrueが返却されます。

次に「*」を使ったソースコードで見てみましょう

"Helloooooow".matches(Hello*w); // ⬅︎ True

上記の例では、「o*」で正規表現の判定を行なっているので、何個「o」があってもTrueが返却されます。

例えば、「Hellow」、「Hellooow」、「「Hellooooooooooooooooooooooooow」」でも全てTrueになります。

そして任意の文字を表す「.」と、0回以上繰り返す「*」を組み合わせることで、以下のような正規表現が可能となります。

str.matches("Hello.*"); // ⬅︎ Helloで始まる文字なら何でもOK
str.matches(".*World"); // ⬅︎ Worldでおわる文字なら何でもOK

繰り返しの正規表現

正規表現意味
{n}直前の文字のn回の繰り返し
{n,}直前の文字のn回以上の繰り返し
{n, m}直前の文字のn回以上、m回以下の繰り返し
?直前の文字の0回、または1回の繰り返し
+直前の文字の1回以上の繰り返し

実際の例を見てみましょう。

"Helloooow".matches(Hello{4}w); // ⬅︎ True 「o」が4文字ならOK
"Helloooow".matches(Hello{2}w); // ⬅︎ False 「o」が2文字じゃないのでNG

"Helloooow".matches(Hello{2,}w); // ⬅︎ True 「o」が2文字以上ならOK

"Helloooow".matches(Hello{2, 4}w); // ⬅︎ True 「o」が2文字以上、4文字以下ならOK
"Helloooow".matches(Hello{2, 6}w); // ⬅︎ True 「o」が2文字以上、6文字以下ならOK
"Helloooow".matches(Hello{2, 3}w); // ⬅︎ False 「o」が2文字以上、3文字以下じゃないのでNG

"Helloooow".matches(He?lloooow); // ⬅︎ True 「e」の文字が0文字か1文字ならOK
"Hlloooow".matches(He?lloooow) // ⬅︎ True 「e」の文字が0文字か1文字ならOK
"Heelloooow".matches(He?lloooow); // ⬅︎ False 「e」の文字が2文字あるのでNG

"Helloooow".matches(He?lloooow); // ⬅︎ True 「e」1文字以上ならOK
"Hlloooow".matches(He?lloooow) // ⬅︎ False 「e」の文字が0文字なのでNG
"Heelloooow".matches(He?lloooow); // ⬅︎ True 「e」1文字以上ならOK

いずれかの文字を表す正規表現

正規表現意味
[S][]の中に定義したいずれか文字であること

実際の例を見てみましょう。

"Hello".matches(H[aiueo]llo); // ⬅︎ True aiueoのいずれかの文字ならOK
"Hallo".matches(H[aiueo]llo); // ⬅︎ True aiueoのいずれかの文字ならOK
"Hxllo".matches(H[aiueo]llo); // ⬅︎ False aiueoのいずれでもないためNG

いずれかの文字グループ

正規表現意味
[a-z]a〜zのいずれかの文字(全ての小文字のアルファベット)
[A-Z]A〜Zのいずれかの文字(全ての大文字のアルファベット)
[0-9]いずれかの数字
¥dいずれかの数字([0-9]と同じ)
¥w英字・数字・アンダーバー([a-zA-Z_0-9]と同じ)
¥s空白文字(スペース、タブ文字、改行文字など)

実際の例を見てみましょう。

"Hello".matches("[a-zA-Z]{5}") // ⬅︎ True アルファベット(大文字・小文字)5文字であればOK

他にも正規表現はいくつかありますが、代表的な例を覚えておけば、普段の開発はそこまで苦労しないはず、後は必要になったタイミングで調べましょう。

もっとJavaを勉強したい方は、以下の本がオススメです。

すっきりわかるJava入門第3段

スッキリわかるJava入門第3版 [ 中山清喬 ]

価格:2,860円
(2021/4/18 21:19時点)
感想(3件)

===============

以上、Javaの良く使う正規表現を紹介してみました。

この情報が皆さんの人生のお役に立てれば幸いです。

エンジニアとして日本のITリテラシーを高めていきたいと共感して頂いた人は、是非このブログの拡散とyoutubeの方も見ていただけると嬉しいです。

記事を最後まで見ていただきありがとうございました。

執筆者: hiroエンジニア

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です