skillup

技術ブログ

Java

正規表現(判定:置換:抽出)

投稿日:

Javaの正規表現を利用した置換、抽出について書きます。

正規表現の基本ルール

パターン 意味
パターン 文字列 結果
^ 先頭にマッチする “^ab” “abcd”
“cdab”
true
false
$ 末尾にマッチする “ab$” “abcd”
“cdab”
false
true
. 任意の1文字にマッチする “a.c” “abc”
“abbc”
“ac”
true
false
false
? 直前の文字が0個または1個にマッチする “^A?$” “”
“A”
“AA”
“B”
true
true
false
false
* 直前の文字が0個以上にマッチする “^A*$” “”
“A”
“AA”
“B”
true
true
true
false
+ 直前の文字が1個以上にマッチする “^A+$” “”
“A”
“AA”
“B”
false
true
true
false
\d 半角数値(0~9)にマッチする
※ [0-9]と同じ
“\\d” “0123”
“0123”
“abc”
true
false
false
\D 半角数値(0~9)以外にマッチする
※ [^0-9]と同じ
“\\D” “0123”
“0123”
“abc”
false
true
true
\w 半角英数値(0~9、a~z、A~Z、_)にマッチする
※ [0-9a-zA-Z_]と同じ
“\\w” “012_AbC”
“12Ab”
“#$%&”
true
false
false
\W 半角英数値(0~9、a~z、A~Z、_)以外にマッチする
※ [^0-9a-zA-Z_]と同じ
“\\W” “012_AbC”
“12Ab”
“#$%&”
false
true
true
[ ] いずれかの文字とマッチする “[ABC]” “A”
“B”
“D”
true
true
false
( ) 1つのグループとして扱う “(ABC)” “ABC”
“CBA”
true
false
{n} 直前の文字にn回マッチする “^A{3}$” “AA”
“AAA”
“AAAA”
false
true
false
{n,} 直前の文字にn回以上マッチする “^A{3,}$” “AA”
“AAA”
“AAAA”
false
true
true
{n,m} 直前の文字にn回以上m回以下マッチする “^A{3,4}$” “AA”
“AAA”
“AAAA”
“AAAAA”
false
true
true
false
| いずれかとマッチする “ABC|DEF” “ABC”
“DEF”
“CBA”
“DE”
true
true
false
false
範囲を指定する “[3-7]” “2”
“3”
“7”
“8”
false
true
true
false
^ 否定([ ]の中で使用する) “[^AB]” “A”
“B”
“C”
false
false
true
&& かつ “[0-9&&[^4]]” “3”
“4”
“5”
true
false
true

 

Javaでの正規表現の処理の流れ

JavaではPatternクラスとMatchクラスを使って、正規表現を表現します。大まかに下記のような流れです。

Step1 文字列で正規表現を定義

例:郵便番号の場合、数字3桁-4桁なので下記のように表示。※エスケープ文字に注意!
String regex =”\\d{3}-\\d{4}”;

Step2 compileメソッドをつかって、Patternオブジェクトを生成

Patter p = patter.compile( regex );

また改行を含めたい大文字と小文字を含めたいなどは下記のオプションを第2引数にいれればよい。

Patter p = patter.compile( regex , Pattern.CASE_INSENSITIVE );

Step3 Patterオブジェクトのmatcherメソッドを使い、実際の文字列をMatcherオブジェクトにセットする。

Matcher matcher = patter.matcher(“111-1111”);

Step4 Matcherオブジェクトのfindやgroupを使い、判定や抽出を行う

matcher.find()やmatcher.group()など

実処理

判定

対象文字列が正規表現と一致するかを判定する

抽出

正規表現に一致するものを抽出する

置換

正規表現に一致するものを置換する

-Java
-

執筆者:


comment

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

関連記事

no image

リソースファイルの読み込み

リソースバンドルは基本的にJSFから参照して呼び出すことが多いんですが、もちろんプログラム内からも呼び出すことはできます。 書き方も単純でリソースバンドルをインスタンス生成してメッセージのキーで呼び出 …

no image

Annnotationについて その2

Java(JavaEE)をやりだして半年ぐらいたつんですが、個人的に鬼門だとおもっていたのが下記内容です。 MVCではないコンポーネントの考え方 クラスを使ったジェネリクスの使い方(型パラメータなど) …

no image

try~catch~finallyで気を付けること

JavaでExceptionが発生したとき、基本的にはtry~catch~finallyをつかっているのですが、今回Exceptionが吐かれないという事態があったのでメモします。 [crayon-5 …

no image

Git→Jenkinsの連携 その2

以前、このエントリーでGitとjenkinsの連携に関して書いたんですが、今回jenkinsとgitのソースが別環境にあるケースの構築をしたのでメモしておきます。 Contents1 Jenkinsで …

no image

新アプリの本番環境デプロイについて

新しく作ったWEBアプリを本番配置しようとしたんですが、何度もやっているはずの処理がいざやろうとするといろいろと手間取ってしまい、1時間近くかかりました。 容量悪いなーと思いつつ、こういった行為はなる …