Javaの正規表現検索でハマったこと

投稿 2022年7月31日

更新 2022年7月31日

専門用語の数:

Javaの正規表現検索でハマったこと

~ 目次 ~

ハマったこと

原因

対処法

部分一致

内部処理

まとめ

ハマったこと

URLがhttpsかhttpかを判定したかった時に、

以下のような処理で判定しました。


この実行結果は、「http」と出力されます。


正規表現は間違えているのか?とか、

何が間違えているのかを必死に探してて、ドはまりしてました。

原因

Stringクラスにある「matches」メソッドは、

完全一致の正規表現でしか、ヒットしないということでした。


その行すべてが正規表現で一致しないと、trueにならないということです。

「.*」や「.+」等を使用するイメージです。

対処法

以下のように正規表現を書けば、ヒットします。


この実行結果は、「https」と出力されます。

部分一致

上記で紹介したメソッド以外にも、正規表現検索できます。

「Matcher」の「find」メソッドなら、部分検索を実現できます。


この実行結果は、「https」と出力されます。


最初、ハマったときと同じ正規表現で、ちゃんとヒットします。

内部処理

「String」クラスの「matches」メソッド、

内部的には「Matcher」クラスの「matches」メソッドを使っています。


まとめると、「Matcher」クラスのメソッドは、

完全一致の「find」メソッド

部分一致の「matches」メソッド

となっております。

まとめ

Javaの正規表現検索でハマった対処法でした。

知らずに使っていると、ハマるのでご注意ください。

Stringのmatchesは便利に使える反面、

罠があるのだなと、学びました。


以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)