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

JPAでの多対多のリレーション

以前、このエントリーでJPAのリレーションについて説明しました。 今回は多対多について説明します。 Contents1 テーブル構成2 ソース2.1 CDのエンティティ2.2 Artistのエンティテ …

no image

String,Integer,Booleanの相互変換

データベースにはbooleanでデータが入っているのに画面では0か1の数字でないと表示ができないときなどがあると思います。 そんな時に文字列と論理値、あるいは文字列と数値、数値と論理値の変換などをする …

no image

Javaでの文字コード判定、変換

Javaにて文字コード判定の処理を書きます。 Contents1 通常の文字コードの判定、変換2 ファイルの文字コード判定、変換2.1 juniversalchardet2.1.1 ダウンロード2.1 …

no image

日付けのメソッド その2

以前、時刻を扱うエントリーではCalendarクラスとDateクラスを使いましたが、Java8で標準になったTimeAPIについて調べてみます。 Contents1 現在時刻の出力2 任意時間の出力3 …

no image

JavaSEでのCDI

以前、JavaSEでもCDIを使ってみたい!と思ったのですが、以前は探し方が悪かったのか情報を見つけ出すことができませんでした。 が、昨日ちょっと検索したらちょっと情報があり、無事実装できたのでメモし …