正規表現を使うと、複雑な検索を必要最小限のすっきりとしたコーディングで実現できます。
反面、あまり複雑に組み合わせるとプログラムコードの視認性が悪くなり、改修の際、余計に工数がかかるので、ループや条件分岐で対応した方が良いという話も、現場では良く聞きます。
また、正規表現は、数字と記号の羅列だけなので、覚えにくく、少し使用していないとすぐに忘れてしまうというのも難点です。
ここまで書くとあまり利用価値のない正規表現ですが、どのプログラムでも利用でき、汎用性は高いので、正規表現の一番キホンになる構文だけでも、ピックアップしてまとめたいと思います。
1.正規表現の基本構文
各プログラム言語、DBMSごと、正規表現を使って検索、置換を処理する関数が準備されています。
これら関数を使用する際、はじめに準備するのが、「正規表現のパターン」です。
PHPを例とした場合、正規表現で検索を行う関数として、mb_ereg関数があります。

上図のように、「正規表現のパターン」と「検索する文字列」をパラメータとして結果を出します。
この「正規表現のパターン」を以下まとめます。
正規表現のパターン
以下の検索文字、繰り返し、位置を組み合わせて正規表現のパターンを作ります。
~ 検索文字 ~
正規表現 |
説明 |
(任意) |
ユーザーが、直接指定する1文字です。 例えば「P」という文字が含まれるか調べる場合は「P」を直接指定します。 |
. |
任意の1文字を表します。 |
[ABC] |
「A」または「B」または「C」の1文字を表します。 例えば「ADD」のように文字列に1文字でも含まれればマッチとなります。
「AAA」のように3文字ヒットしてもマッチとなります。 「DDD」のように1文字もヒットしなければ、アンマッチです。 |
[^ABC] |
「A」または「B」または「C」でない1文字を表します。 例えば「AAD」のように文字列に1文字でも含まれればマッチとなります。
「DDD」のように3文字ヒットしてもマッチとなります。 「AAA」のように1文字もヒットしなければ、アンマッチです。 [集合]の中に書かれた^は否定の意味で使われますが、それ以外で使うと先頭という意味になるので、 注意が必要です。 |
[0-9] |
[0123456789]と同じ意味です。数字1文字を表します。 |
[A-Z] |
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]と同じ意味です。数字1文字を表します。 |
[0-9A-Za-z] |
英数字1文字を表します。 このように[ABC]の集合同様、文字範囲指定の場合も連続して書けます。 |
(AAA|BBB) |
「AAA」または「BBB」を表します。 1文字ではなく任意の文字集合ごとOR条件にする場合は、()でグループ化したうえで、|で区切ります。 |
\s |
空白の1文字を表します。 全半角スペースまたは制御文字[\t\n\r\f\v]と同じ意味です。全角スペースは環境依存です。 |
\S |
空白の1文字以外を表します。 全半角スペー以外または制御文字[\t\n\r\f\v]以外です。 |
~ 繰り返し ~
正規表現 |
説明 |
* |
0回以上の繰り返しです。 |
+ |
1回以上の繰り返しです。 |
{n} |
n回の繰り返しです。 |
~ 位置 ~
正規表現のパターン例と結果
正規表現のパターン例 |
検索する文字列 |
結果 |
mb_ereg('A.C',検索する文字列) |
ABC |
○ |
ABX |
× |
XABCX |
○ |
ABBC |
× |
ABCABC |
○ |
mb_ereg('^A.C$',検索する文字列) |
ABC |
○ |
ABX |
× |
XABCX |
× |
ABBC |
× |
ABCABC |
× |
mb_ereg('^[0-9]{3}-[0-9]{4}$',検索する文字列) |
123-4567 |
○ |
1234567 |
× |
123-A567 |
× |
123-45678 |
× |
正規表現による置換えの場合の注意
正規表現による置換えの場合、どこまでの範囲を置き換えるのかを示す、最長マッチと最短マッチを意識する必要があります。

2.各プログラム言語ごと正規表現の使用方法
PHP
関数 |
説明 |
mb_ereg(正規表現のパターン,検索する文字列) |
正規表現による検索を行う。 |
mb_eregi(正規表現のパターン,検索する文字列) |
大文字小文字を区別せずに正規表現による検索を行う。 |
mb_ereg_replace(正規表現のパターン,置換える文字列,検索する文字列) |
正規表現による置換を行う。 |
mb_eregi_replace(正規表現のパターン,置換える文字列,検索する文字列) |
大文字小文字を区別せずに正規表現による置換を行う。 |
~ 関数使用例(mb_ereg) ~
<?php
//例:郵便番号のバリデーションチェック
$target="123-4567";
if(mb_ereg('^[0-9]{3}-[0-9]{4}$',$target)){
//echo "○";
}else{
echo "正しく入力して下さい。";
}
?>
Java
必須インポート:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
関数 |
説明 |
(PatternObj)=Pattern.compile(正規表現のパターン) |
Java内で使用する正規表現のパターンオブジェクトを生成。 |
(MatcherObj)=(PatternObj).matcher(検索する文字列) |
正規表現のパターンオブジェクトと検索する文字列を操作比較するマッチャーオブジェクトを生成。 |
(MatcherObj).find() |
正規表現のパターンが検索する文字列に含まれるか結果を返す。 |
~ 関数使用例 ~
//例:郵便番号のバリデーションチェック
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PostNoCheck {
public static void main(String[] args) {
// 検索する文字列
String target = "123-4567";
// 正規表現のパターンオブジェクトを生成
Pattern p = Pattern.compile("^[0-9]{3}-[0-9]{4}$");
//マッチャーオブジェクトを生成
Matcher m = p.matcher(target);
if (m.find()){
//System.out.println("○");
}else{
System.out.println("正しく入力して下さい。");
}
VB
必須インポート:
Imports System.Text.RegularExpressions
関数 |
説明 |
Regex.IsMatch(検索する文字列,正規表現のパターン) |
正規表現による検索を行う。 |
~ 関数使用例(mb_ereg) ~
'例:郵便番号のバリデーションチェック
Imports System.Text.RegularExpressions
dim target as String
target="123-4567"
If Regex.IsMatch(target,"^[0-9]{3}-[0-9]{4}$") Then
//MsgBox "○";
Else
MsgBox "正しく入力して下さい。"
End If