[解決済み】JavaのString.contains()メソッドで正規表現を使用する方法
質問
ある文字列が、"stores", "store", "product" という単語をこの順番で含み、それらの間に何があってもよいかどうかをチェックしたいのです。
を使ってみました。
someString.contains(stores%store%product);
と、さらに
.contains("stores%store%product");
正規表現を明示的に宣言してメソッドに渡す必要があるのでしょうか、それとも正規表現を一切渡さなくてもいいのでしょうか?
どのように解決するのですか?
文字列を含む
String.contains
はStringで動作します。正規表現では動作しません。指定された文字列が現在の文字列の中にあるかどうかをチェックします。
なお
String.contains
は単語の境界をチェックせず、単に部分文字列をチェックします。
Regexソリューション
Regexは
String.contains
キーワードに単語の境界を強制することができるからです(他のことも含めて)。つまり、キーワードを
単語
ではなく
部分文字列
.
使用方法
String.matches
を以下の正規表現と組み合わせてください。
"(?s).*\\bstores\\b.*\\bstore\\b.*\\bproduct\\b.*"
RAW 正規表現 (文字列リテラルで行われたエスケープを除去したもの。上の文字列をプリントアウトするとこうなる)。
(?s).*\bstores\b.*\bstore\b.*\bproduct\b.*
は
\b
は単語の境界をチェックします。
restores store products
. なお
stores 3store_product
も却下されます。なぜなら、digit と
_
は単語の一部とみなされますが、このようなケースが自然文に現れるとは思えません。
単語境界は両側からチェックされるので、上記の正規表現は正確な単語を検索することになる。つまり
stores stores product
という単語を検索しているので、上記の正規表現にはマッチしません。
store
がなく
s
.
.
通常、任意の文字にマッチします。
ただし
改行文字数
.
(?s)
を使うと
.
はどんな文字にも例外なくマッチします (この点を指摘してくれた Tim Pietzcker に感謝します)。
関連
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] mavenのコンパイルに失敗するのはなぜですか?
-
[解決済み] タイプの安全性。アンチェック・キャスト
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] JSで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] Apache Camelのログに簡単なテキストを記録する
-
[解決済み] アクティビティに割り当てられない