PHP 正規表現
1. PHP 正規表現の概要
正規表現(Regular Expression)は、検索パターン(Search Pattern)を形成する一連の文字列です。テキスト内のデータを検索する際、この検索パターンを使用して、何を探しているのかを記述することができます。
正規表現は単一の文字であることもあれば、より複雑なパターンになることもあります。また、あらゆる種類のテキスト検索やテキスト置換の操作を実行するために使用されます。
2. 正規表現の構文
PHP において、正規表現はデリミタ(Delimiters)、パターン(Pattern)、およびオプションのモディファイア(Modifiers)で構成される文字列です。
2.1 シンタックス
"/pattern/modifiers"
- デリミタ(Delimiters): パターンを囲む文字(例:
/) - パターン(Pattern): 検索する文字の並び
- モディファイア(Modifiers): 検索をどのように実行するかを定義(例:
iは大文字と小文字を区別しない検索を指定)
以下の正規表現の例を見てみましょう:
$exp = "/volardev/i";ここでは、/ が デリミタ、volardev が検索する パターン、そして i が検索において大文字と小文字を区別しないようにする モディファイア です。
デリミタには、文字、数字、バックスラッシュ、またはスペース以外の任意の文字を使用できます。最も一般的なデリミタはフォワードスラッシュ(/)ですが、パターン自体にフォワードスラッシュが含まれている場合は、# や ~ などの他のデリミタを選択すると便利です。
3. 正規表現モディファイア
モディファイアは、検索の実行方法を指定します。
| モディファイア | 説明 |
|---|---|
i | 大文字と小文字を区別せずに検索を実行します。 |
m | マルチライン検索を実行します(文字列の先頭や末尾を検索するパターンが、各行の先頭や末尾にマッチするようになります)。 |
u | UTF-8 エンコードされたパターンの正しいマッチングを有効にします。 |
4. 正規表現パターン(ブラケット)
ブラケット(Brackets)は、特定の範囲の文字を見つけるために使用されます。
| 表現 | 説明 |
|---|---|
[abc] | ブラケット内の文字のいずれか一つ、または複数を検索します。 |
[^abc] | ブラケット内の文字の間には「ない」任意の文字を検索します。 |
[a-z] | アルファベットの順序で指定された2つの文字の間にある任意の文字を検索します。 |
[A-z] | 指定された大文字と指定された小文字の間の任意の文字を検索します。 |
[A-Z] | アルファベットの順序で指定された2つの大文字の間にある任意の文字を検索します。 |
[123] | ブラケット内の数字のいずれか一つ、または複数を検索します。 |
[0-5] | 2つの数字の間にある任意の数字を検索します。 |
[0-9] | 任意の数字を検索します。 |
5. メタ文字(Metacharacters)
メタ文字は、特別な意味を持つ文字です。
| メタ文字 | 説明 |
|---|---|
| | cat|dog|fish のように、| で区切られたパターンのいずれかにマッチするものを検索します。 |
. | 任意の1文字を検索します。 |
^ | ^Hello のように、文字列の先頭でマッチするものを検索します。 |
$ | World$ のように、文字列の末尾でマッチするものを検索します。 |
\d | 任意の数字を検索します。 |
\D | 数字以外の任意の文字を検索します。 |
\s | 任意の空白文字(ホワイトスペース)を検索します。 |
\S | 空白文字以外の任意の文字を検索します。 |
\w | 任意のアルファベット(a〜Z)と数字(0〜9)を検索します。 |
\W | アルファベットと数字以外の任意の文字を検索します。 |
\b | 単語の先頭(例: \bWORD)または末尾(例: WORD\b)でマッチするものを検索します。 |
\uxxxx | 16進数 xxxx で指定された Unicode 文字を検索します。 |
6. 量化子(Quantifiers)
量化子は、マッチさせる数量を定義します。
| 量化子 | 説明 |
|---|---|
n+ | 少なくとも1つの n を含む任意の文字列にマッチします。 |
n* | 0個以上の n を含む任意の文字列にマッチします。 |
n? | 0個または1個の n を含む任意の文字列にマッチします。 |
n{3} | 3個の n のシーケンスを含む任意の文字列にマッチします。 |
n{2, 5} | 少なくとも2個、最大5個の n のシーケンスを含む任意の文字列にマッチします。 |
n{3,} | 少なくとも3個の n のシーケンスを含む任意の文字列にマッチします。 |