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

小ネタ集

最近覚えた小ネタをのせていきます。 熟練のプログラマからすると当たり前のことが多いと思いますが・・・ Contents1 {}でスコープ限定2 リダイレクト:face-redirect=true3 H …

no image

文字列のENUM化

文字列をENUM化したいときの処理について リンク集です。 ENUMが文字だけのとき(key=>valueタイプでない時)、key=>valueタイプの時両方OKのようです。 enum 定 …

no image

dbUnitの使い方

えーJavaで有名なテストツールDBUnitについて。 DbUtilではありませんので間違えないように。(私は最初間違えました・・・) まだ全然使い込んでるわけではありませんがどんなことができるかとい …

no image

JavaでのSQLの書き方

ちょっと小ネタです。 通常SQLを記述する場合、縦に分けて書くのが見た目にも見やすく、保守性も高いです。 例として

と書くよりは、 [ …

no image

Javaビルドツール

JavaではPHPやRubyなどといったインタプリタ言語とは違い、ソースはクラスファイルといわれるファイルに変換する必要があります。この作業をコンパイルと呼びます。最低限この作業をやらないとプログラム …

アーカイブ