1. Top
  2. Java SE
  3. 正規表現

正規表現

正規表現とは

正規表現とは文字列の一部をパターン化して記述する表現方法の事になります。
例えば、「.」を任意の文字、「\d」を数字として表す事が出来ます。 もとは UNIXの awkなどのテキストフィルタで用いられており、Perlを使ったことがある方にとっては馴染み深いかもしれません。
Javaでも JDK1.4から、java.util.regex パッケージが導入され、正規表現のクラスが標準で使用できるようになりました。

java.util.regexパッケージはPatternクラス、Matcherクラスで構成されています。
Patternクラスでは正規表現をコンパイルし、正規表現処理を行うMatcherクラスのオブジェクトを生成します。
Matcherクラスでは正規表現処理(文字列が正規表現にマッチするか、正規表現にマッチした文字列の置換など)を行うメソッドが用意されています。

Patternクラス

・compileメソッド
引数に正規表現を指定し、正規表現をコンパイルします。

・matcherメソッド
引数に正規表現処理の対象となる文字列を指定し、Matcherクラスのオブジェクトを生成します。

・splitメソッド
引数に指定された文字列を正規表現にあわせ分割し、分割された文字列を配列で返します。

サンプル:Javaの正規表現で文字列を分割、置換え、抽出、検索する
サンプル:Javaの正規表現でカンマ区切りCSVファイルを分割する

Matcherクラス

・replaceAllメソッド
正規表現に合致する文字列を引数に指定した文字列にすべて置換します。

・appendReplacementメソッド
正規表現に合致する文字列を引数に指定した文字列に1箇所づつ置換します。

・matchesメソッド
文字列が正規表現に合致するかを調べます。

・findメソッド
文字列が正規表現に合致するか、順番に調べます。

・groupメソッド
正規表現に合致した文字列を返します。

サンプル:Javaの正規表現で文字列を分割、置換え、抽出、検索する
サンプル:Javaの正規表現でカンマ区切りCSVファイルを分割する

ページの先頭へ

正規表現構文

Java使用できる主要なメタ文字の一覧を以下に示します。

戻り型
メソッド
説明
^
行頭にマッチします。
例:1、^hello。行頭にhelloの文字列はこのパターンにマッチします。
$
行末にマッチします。
例:1、hello$。行末にhelloの文字列はこのパターンにマッチします。
.
改行以外の任意の1文字にマッチします。
例:1、hello.world。hello worldやhello-worldなどの文字列はこのパターンにマッチします。
[]
角括弧内の任意の1文字にマッチします。
例:1、[abc]。aかb、cはこのパターンにマッチします。
2,r[aeu]d。radやred、rudはこのパターンにマッチします。
[A-Z]
英大文字A-Zの任意1文字にマッチします。
例:1、a[A-Z]c。aAc,aBc,…,aZcなどの文字列はこのパターンにマッチします。
[a-z]
英小文字a-zの任意1文字にマッチします。
例:1、a[a-z]c。aac,abc,…,azcなどの文字列はこのパターンにマッチします。
[0-9]
数字0-9の任意1文字にマッチします。
例:1、a[0-9]c。a0c,a1c,…,a9cなどの文字列はこのパターンにマッチします。
[^]
角括弧内に含まれない1文字にマッチします。
例:1、[^abc]。a、b、c以外の文字はこのパターンにマッチします。
+
直前の表現を0回以上繰り返します。
例:1、ab。aやab、abb、abbbなどの文字列はこのパターンにマッチします。
?
直前の表現を0回または1回繰り返します。
例:1、ab?。aとabはこのパターンにマッチします。
{n}
直前の表現をn回繰り返します。nは整数。
例:1、ab{2}。abbはこのパターンにマッチします。
{n,}
直前の表現をn回以上繰り返します。nは整数。
例:1、ab{2,}。abb、abbbなどはこのパターンにマッチします。
{n,m}
直前の表現をn回からm回まで繰り返します。n,mは整数。
例:1、ab{2,5}。abb,abbb,abbbb,abbbbbはこのパターンにマッチします。
a|b
aまたはbにマッチします
例:1、hello|world。helloまたworldはこのパターンにマッチします。
()
グループ化。()内のパターンは(グループ)と見なされます。このグループに一致する文字列を記憶します。1,2..などの数字によるグループへのアクセスできます。
-
\w
任意の英数字と_ 1文字にマッチします。
例:1、"abc23_".matches("\w*")。trueに返します。
\W
英数字と 以外の任意1文字にマッチします。
例:1、"abc23".matches("\W*")。falseに返します。
\s
任意の空白文字(スペース、タブ、改行、復帰)1文字にマッチします。
例:1、" \n\r".matches("\s*")。trueに返します。
\S
空白文字(スペース、タブ、改行、復帰)以外の任意1文字にマッチします。
例:1、" \n\r".matches("\s*")。falseに返します。
\d
数字の1文字にマッチします。
例:1、"120".matches("\d*")。trueに返します。
\D
数字以外の1文字にマッチします。
例:1、"120".matches("\D*")。falseに返します。
[あ-ん]
ひらがなの1文字にマッチします。
例:1、"あいう".matches("[あ-ん]*")。trueに返します。


ページの先頭へ

正規表現サンプル

Java使用できる主要なメタ文字の一覧を以下に示します。

正規表現内容
正規表現構文
半角英小文字チェック
/^[a-z]+$/
半角英大文字チェック
/^[A-Z]+$/
半角数字チェック
/^[\d]+$/
半角英字チェック
/^[a-zA-Z]+$/
半角英数字チェック
/^[\w]+$/
URLチェック
/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/
メールアドレスチェック
/^([\w])+([\w\._-])*\@([\w])+([\w\._-])*\.([a-zA-Z])+$/
郵便番号チェック
/^\d{3}\-\d{4}$/
カンマ区切りCSV



ページの先頭へ