
【6日でできるPHP入門】正規表現
データ入力の検証、URL ルーティング、テンプレート置換──Web 開発で頻繁に登場する文字列操作を“ひと筆書き”でこなせるのが正規表現 (Regular Expression) です。英数字や記号の並び方をパターンとして記述し、マッチング・抽出・置換など多彩な加工を可能にします。ここでは PHP における正規表現の基本概念から実践的な API の使い方まで、動くコードとともに体系的に解説します。

1.正規表現の基礎
1.1. メタ文字一覧
メタ文字 | 意味 | 例 |
---|---|---|
. | 任意の1文字 | a.c → abc , axc |
^ | 文字列の先頭 | ^http → http:// にマッチ |
$ | 文字列の末尾 | jpg$ → file.jpg |
[] | 文字集合 | [abc] → a ,b ,c |
[^] | 文字集合の否定 | [^0-9] → 数字以外 |
- | 範囲指定 | [A-Z] |
+ | 直前1回以上 | \d+ |
? | 直前0回または1回 | colou?r |
{m,n} | m〜n 回繰り返し | \d{3,4} |
() | グループ化/キャプチャ | (abc)+ |
1.2. 典型パターン例
パターン | 説明 | マッチ例 |
---|---|---|
^[0-9]{3}-[0-9]{4}$ | 郵便番号 | 123-4567 |
^[A-Za-z0-9._%+-]+@[\w.-]+\.[A-Za-z]{2,}$ | メールアドレス | user@example.com |
https?://.+ | HTTP/HTTPS URL | https://php.net |
2.PHP の正規表現 API
2.1. 判定 ― preg_match
preg_match(
string|array $pattern, // 例: '/^cat$/'
string $subject, // 評価対象
array|null &$matches = [] // キャプチャ結果
): int|false // 1=一致, 0=不一致, false=エラー
2.2. 置換 ― preg_replace
preg_replace(
string|array $pattern,
string|array $replacement,
string|array $subject,
int $limit = -1,
int &$count = null,
int $flags = 0
): string|array|null
3.サンプルコードで学ぶ
3.1. 郵便番号チェック関数
ファイル名: lesson49_1.php
<?php
function is_zip(string $code): bool {
return (bool)preg_match('/^[0-9]{3}-[0-9]{4}$/', $code);
}
// テスト
$cases = ["060-0001", "1010051", "123-4567"];
foreach ($cases as $c){
echo $c . (is_zip($c) ? " は郵便番号です。<br>" : " は郵便番号ではありません。<br>");
}
?>
実行結果

3.2. スネークケース → キャメルケース変換
ファイル名: lesson49_2.php
<?php
function snake_to_camel(string $text): string {
return preg_replace_callback(
'/_([a-z])/',
fn($m) => strtoupper($m[1]),
strtolower($text)
);
}
echo snake_to_camel("user_name") . "<br>"; // userName
echo snake_to_camel("long_variable_id") . "<br>"; // longVariableId
?>
実行結果

4.拡張テクニック
4.1. マッチ結果をすべて取得 ― preg_match_all
$text = "PHP7, PHP8, PHP8.3";
preg_match_all('/PHP\d(\.\d)?/', $text, $hits);
print_r($hits[0]); // Array ( [0] => PHP7 [1] => PHP8 [2] => PHP8.3 )
4.2. 分割 ― preg_split
$csv = "foo, bar ,baz";
$parts = preg_split('/\s*,\s*/', $csv);
print_r($parts); // Array ( [0] => foo [1] => bar [2] => baz )
4.3 フィルター ― preg_grep
$words = ["apple", "banana", "cherry"];
$with_a = preg_grep('/a/', $words);
print_r($with_a); // apple, banana
まとめ
- 正規表現は文字列の規則をパターン化し、判定・検索・置換を一括でこなす強力ツール。
- PHP では
preg_match
/preg_replace
を中心に、分割・抽出・フィルタリング系 API がそろっている。 - メタ文字と量指定子の組み合わせを覚えれば、大半の入力検証ロジックを数行で実装できる。