PHPでの正規表現の使い方について、preg_matchとmb_eregの違いや具体的な活用法を解説します。

PHPで正規表現を使いたいんですが、preg_matchとmb_eregの使い方について教えてください。



もちろんです。この記事では、PHPでの正規表現の基本的な使い方について、preg_matchとmb_eregの違いや具体的な活用方法を中心に解説しましょう!
preg_matchの使い方
preg_matchは、PHPで正規表現による文字列マッチングを行うための関数です。この関数は、指定されたパターンが文字列にマッチするかどうかを調べ、マッチした場合はその結果を返します。
基本構文
preg_match(‘パターン’, ‘文字列’, ‘マッチした結果の格納先’);
- パターン:正規表現パターンを指定します。
- 文字列:パターンをマッチさせる対象の文字列を指定します。
- マッチした結果の格納先(オプション):マッチした部分を配列として格納します。
次に、preg_matchを使った基本的な例を示します。
$pattern = '/^hello/';
$string = 'hello world';
if (preg_match($pattern, $string, $matches)) {
echo 'マッチしました: ' . $matches[0];
} else {
echo 'マッチしませんでした';
}この例では、文字列hello worldがパターン/^hello/にマッチするかどうかをチェックしています。/^hello/は、文字列の先頭がhelloで始まるかどうかを調べるパターンです。マッチした場合、結果が$matches配列に格納され、マッチしました: helloと表示されます。
$pattern = '/\d+/';
$string = '123abc456';
if (preg_match($pattern, $string, $matches)) {
echo '数字が見つかりました: ' . $matches[0];
} else {
echo '数字が見つかりませんでした';
}この例では、文字列123abc456から連続する数字を抽出しています。パターン/\d+/は、1回以上の数字の連続を表します。マッチした場合、結果が$matches配列に格納され、最初にマッチした数字の部分が表示されます。
$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
$string = 'test@example.com';
if (preg_match($pattern, $string, $matches)) {
echo '有効なメールアドレスです: ' . $matches[0];
} else {
echo '無効なメールアドレスです';
}この例では、メールアドレスが有効かどうかをチェックしています。パターン/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/は、一般的なメールアドレスの形式にマッチします。マッチした場合、結果が$matches配列に格納され、有効なメールアドレスです: test@example.comと表示されます。
mb_eregの使い方
mb_eregは、PHPでマルチバイト文字列を扱うための正規表現マッチング関数です。この関数は、日本語などのマルチバイト文字を含む文字列に対して正規表現を適用する際に非常に便利です。
構文:mb_ereg(‘パターン’, ‘文字列’, ‘マッチした結果の格納先’);
- パターン:正規表現パターンを指定します。
- 文字列:パターンをマッチさせる対象の文字列を指定します。
- マッチした結果の格納先(オプション):マッチした部分を配列として格納します。
次に、mb_eregを使った基本的な例を示します。
$pattern = '^こんにちは';
$string = 'こんにちは、世界';
if (mb_ereg($pattern, $string, $matches)) {
echo 'マッチしました: ' . $matches[0];
} else {
echo 'マッチしませんでした';
}この例では、文字列こんにちは、世界がパターン^こんにちはにマッチするかどうかをチェックしています。^こんにちはは、文字列の先頭がこんにちはで始まるかどうかを調べるパターンです。マッチした場合、結果が$matches配列に格納され、マッチしました: こんにちはと表示されます。
$pattern = '[ぁ-ん]+';
$string = 'これはテストです';
if (mb_ereg($pattern, $string, $matches)) {
echo 'ひらがなが見つかりました: ' . $matches[0];
} else {
echo 'ひらがなが見つかりませんでした';
}
この例では、文字列これはテストですからひらがなの部分を抽出しています。パターン[ぁ-ん]+は、ひらがなが1回以上連続する部分にマッチします。マッチした場合、結果が$matches配列に格納され、最初にマッチしたひらがなの部分が表示されます。
$pattern = '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
$string = 'テスト@example.com';
if (mb_ereg($pattern, $string, $matches)) {
echo '有効なメールアドレスです: ' . $matches[0];
} else {
echo '無効なメールアドレスです';
}この例では、メールアドレスが有効かどうかをチェックしています。パターン^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$は、一般的なメールアドレスの形式にマッチします。マッチした場合、結果が$matches配列に格納され、有効なメールアドレスです: テスト@example.comと表示されます。
preg_matchとmb_eregの比較
| 特徴 | preg_match | mb_ereg |
|---|---|---|
| 対応文字 | シングルバイト文字とマルチバイト文字 | マルチバイト文字 |
| 使用する正規表現 | PCRE(Perl Compatible Regular Expressions) | POSIX互換正規表現 |
| パフォーマンス | 高速 | やや遅い |
mb_eregは、マルチバイト文字を扱う際に非常に有用であり、日本語などの文字列処理に適しています。これらの基本的な使い方を理解し、正規表現を活用して効率的に文字列を操作しましょう。
preg_matchとmb_eregの違い
PHPでは正規表現を使用して文字列操作を行うために、preg_matchとmb_eregの二つの主要な関数があります。これらの関数はそれぞれ異なる特徴を持っており、使用する状況によって使い分けることが重要です。
基本的な違い
| 特徴 | preg_match | mb_ereg |
|---|---|---|
| 対応文字 | シングルバイト文字とマルチバイト文字 | マルチバイト文字 |
| 使用する正規表現 | PCRE(Perl Compatible Regular Expressions) | POSIX互換正規表現 |
| パフォーマンス | 高速 | やや遅い |
| エンコーディング | UTF-8に対応 | マルチバイト文字に最適 |
- 対応文字の種類:
- preg_matchは、シングルバイト文字とマルチバイト文字の両方に対応しています。ただし、主にシングルバイト文字を対象とした操作に最適です。
- mb_eregは、マルチバイト文字を扱うために設計されており、日本語や中国語などのマルチバイト文字列の処理に適しています。
- 使用する正規表現のタイプ:
- preg_matchは、PCRE(Perl Compatible Regular Expressions)を使用します。これは、Perl互換の強力な正規表現エンジンであり、幅広いパターンマッチング機能を提供します。
- mb_eregは、POSIX互換の正規表現を使用します。POSIX正規表現は、PCREに比べて機能が制限されていますが、マルチバイト文字の処理に特化しています。
- パフォーマンス:
- preg_matchは、高速で効率的なパフォーマンスを提供します。特に大量のデータや複雑なパターンマッチングを行う場合に有利です。
- mb_eregは、マルチバイト文字の処理においては有用ですが、パフォーマンスはやや劣ります。特に、大規模なデータセットを扱う場合は注意が必要です。
- エンコーディングの対応:
- preg_matchは、UTF-8エンコーディングに対応していますが、マルチバイト文字を扱う際には追加の設定や考慮が必要です。
- mb_eregは、PHPのマルチバイト文字列関数(mbstring)と組み合わせて使用されることが多く、マルチバイト文字に対する自然なサポートを提供します。
まとめ
- preg_match:
- シングルバイト文字とマルチバイト文字に対応
- PCRE(Perl Compatible Regular Expressions)を使用
- 高速なパフォーマンスを提供
- 複雑なパターンマッチングに適している
- mb_ereg:
- マルチバイト文字に特化
- POSIX互換正規表現を使用
- 日本語などのマルチバイト文字列の処理に適している
- パフォーマンスはやや劣るが、自然なマルチバイトサポートを提供



正規表現は非常に強力なツールであり、文字列のパターンマッチングや操作に大変役立ちます。
preg_matchとmb_eregはそれぞれ異なる特徴を持っているため、使用するシチュエーションに応じて適切に使い分けることが重要です。
