読書とプログラミングを中心とした覚書ブログMENUサイトマップSTINGER読書とプログラミングを中心とした覚書ブログ読書とプログラミングについて、日々経験したことを忘れないようにするため、極力ブログに記録を残すように頑張る。expression)とは、文字列のパターンマッチを行う機能です。Java言語も文字列に対して正規表現でパターンマッチする仕掛けがありJava言語の場合、正規表現はPatternクラス、Matcherクラス、Stringクラスで利用可能です。このうちいずれのクラスでも提供されているPattern.matches()、Matcher.matches()、String.matches()を使う場合は、他の言語を含め一般的な正規表現の動作と異なっており、これを踏まえた上でコーディングしないと期待する動作をしないため、はまりがちです。これが以外と分かりにくい動作だったので、この記事にまとめたいと思います。最後に正規表現についてJava言語を含むプログラミング言語では一般的に部分文字列の検索とか文字列の置換といった操作で正規表現が利用されています。正規表現は、ルールを表す表記方法であり、大抵はどのプログラミング言語であっても同様の表記方法をマスターしてしまえば、同じことを別のプログラミング言語でも実現できるし、別のプログラミング言語で書かれたプログラムを見ても内容を理解することが出来る、いわゆるデファクトスタンダード的なプログラム手法だとも言えます。それゆえに、一度でも正規表現を身につけ、Webを検索することなく使えるようになると、コーディング効率を飛躍的に向上させることができます。String.matches()は、一般的な正規表現の動作と異なっており、使う場合はその動作を理解しないと、デバッグに時間をとられてしまいます。Javaで正規表現を扱えるクラス軽く検索してみると、Java言語で正規表現が使えるのは以下のクラスとのこと。※matches()と同等のメソッドはMatcher.matches(),String.matches()にもありこれらの正規表現について、Javaのドキュメントを確認しました。find()入力シーケンスからこのパターンとマッチする次の部分シーケンスを検索します。網掛けの部分という表現が今回の重要なポイントだったりします。書いてあるし、どちらかというとこっちが正規表現としてなじみのある動作なので見落としがちですが、find()では中間一致も出来るという仕様です。念のため正確な表記を英語版を見て確認します。pattern.subsequenceなので明白ですね。input)指定された正規表現をコンパイルして、指定された入力とその正規表現をマッチします。どちらかというとこっちの動作を詳しく書いてほしいのですが、「部分」とつかない入力、つまりmatches()では正規表現が入力全体に完全にマッチするか確認するという動作になります。Pattern.matches()と同等のメソッドが次のメソッドに定義されてますが、同等機能ということで代表してPattern.matches()を使い確認したいと思います。world」のうち、検索する文字列として「123」を含むか判定するコードの違いを比較しました。確認用ソースコード確認用ソースコードとしては、前記した3種類の正規表現の使い方に加えて、次の2種類の動作を比較すると言う内容で次に示します。中間のいずれかに一致させるための正規表現であった場合、matches()はマッチさせることが出来ませんでした。true最後にいかがだったでしょうか?matches()は、正規表現をそこそこ知っている人がパッとJavaドキュメントを見ただけだと、あたかもいつもの使い方が出来そうに勘違いしてしまいます。同じことをやってしまった気がするので、いい加減同じことを繰り返したくなかったので、重い腰を上げメモとして残してみました。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。読書とプログラミングについて、日々経験したことを忘れないようにするため、極力ブログに記録を残すように頑張る。当サイト(読書とプログラミングを中心とした覚書ブログ)は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。