ホーム > PHPの文法 > 9 正規表現 > PHPの正規表現 初心者向け基本~ 早見表掲載!
PHPリファレンス

UPDATE:2024年11月14日

PHPの正規表現 初心者向け基本~ 早見表掲載!

PHPの正規表現 初心者向け基本~ 早見表掲載! | wepicks!
PHP4 PHP5 PHP7 PHP8

正規表現を使用することで、ある文字列が数字なのかアルファベットなのか、電話番号かどうか、メールアドレスかどうか、URLかどうか、など、様々なパターンで判定(チェック)することが出来ます。ユーザーが入力したフォームデータのチェックや Twitter API でインポートしたデータの確認など、ウェブアプリケーションでは多様する機能です。PHPには正規表現専用の関数が用意されており、マッチング置換分割取り出し、など用途に合わせて活用できます。本ページでは正規表現の基本的で大切なことを網羅的に紹介しているので、初心者の方は是非読んで見て下さい!
正規表現 早見表!

正規表現 早見表!

※preg_match関数では、正規表現をデミリタ(delimiters)で囲う必要があります。表の例では、「/ (スラッシュ)」を利用しています。

※preg_match()関数は一致した場合に 1 を返す。不一致の場合は 0 を返す。

文字クラス
正規表現読み動作
[ ]角括弧対象となる文字のパターンを指定する
※自分で作成する/定義済み文字クラスの使用 の2種類がある
[aiueo]a i u e o の何れか
[0-9]0 ~ 9 の何れかで、[0123456789]と同じ意
※- (ハイフン)は文字クラス内で範囲を指定する
[a-z]小文字 a ~ z の何れかで、[abcdefghijklmnopqrstuvwxyz]と同じ意
※- (ハイフン)は文字クラス内で範囲を指定する
[A-Z]大文字 A ~ Z の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
[a-zA-Z0-9]アルファベットか数字の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
[ぁ-んー]ひらがな の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
※日本語を扱う場合 修飾子 u を指定
[ァ-ヶー]カタカナ の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
※日本語を扱う場合 修飾子 u を指定
[一-龠]漢字 の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
※日本語を扱う場合 修飾子 u を指定
[!#<>:;&~@%+$"\'\*\^\(\)\[\]\|\/\.,_-]指定記号 の何れか
※- (ハイフン)は文字クラス内で範囲を指定する

量指定子(繰り返し)
量子定子は次の要素の後ろに配置することが出来ます。

  • 個々の文字 の後ろ。エスケープされた文字も含まれます。'/a?bc/' 文字aの後ろに?
  • 特殊文字 . (ピリオド) の後ろ '/a.*c/' . の後ろに *
  • 文字クラス の後ろ '/a[bcd]{3}e/' 文字クラス[bcd]の後ろに{3}
  • サブパターン の後ろ '/(abc){3}e/' サブパターン(abc)の後ろに{3}
正規表現読み動作
?クエッション0回または1回の出現
*アスタリスク0回以上の繰り返し出現
+プラス1回以上の繰り返し出現
{n}波括弧n回の繰り返し出現
{n,}波括弧n回以上 の繰り返し出現
{n,m}波括弧n回以上 – m回以下 の繰り返し出現

特殊文字(メタ文字)
正規表現読み動作
\バックスラッシュ直後の特殊文字(=メタ文字)を普通の文字として扱う(=エスケープする)
^キャレット文字列の先頭、この特殊文字の次に指定された文字列で始まっていれば という意
※文字クラスで使用すると否定の意
$ドルこの特殊文字の前に指定された文字列で終っていれば という意
※文字クラスで使用すると通常の文字の意
.ドット任意の1文字を表す【\n (改行)以外】
※文字クラスで使用すると通常の文字の意
?クエッション0回または1回の出現
*アクタリスク0回以上の繰り返し出現
+プラス1回以上の繰り返し出現
|パイプ選択肢の作成。ORの意

特殊文字(メタ文字)※ [ ] 内で使用
正規表現読み動作
^キャレット文字クラスの否定の意。クラスの先頭に ^(キャレット)を配置
$ドル[ ] の文字クラス内部では通常の記号となる
.ピリオド[ ] の文字クラス内部では通常の記号となる
ハイフン文字列の範囲を指定

特殊文字
正規表現読み動作
( )小括弧サブパターン(単位)を作る。1つの単位として扱うことができる。
{ }中括弧量指定子
[ ]大括弧文字クラスを作る

パターン修飾子
記号PCRE 内部名前動作
iPCRE_CASELESS正規表現パターンの文字は検索対象文字列の大文字にも小文字にもマッチします。
mPCRE_MULTILINE改行 "\n"がある 複数行 の検索対象文字列を 1行 として処理します。この修飾子を指定すると、行頭メタ文字の ^ と 行末メタ文字の $ が検索対象文字列の行頭と行末に加えて、各改行 "\n" の直前と直後にそれぞれマッチします。
sPCRE_DOTALLメタ文字の .(ピリオド)が 改行 "\n" にもマッチするようになります。設定しない場合、改行 "\n" 以外のすべての文字にマッチします。
APCRE_ANCHORED正規表現パターンは検索対象文字列の先頭でのみマッチングするように固定されます。
DPCRE_DOLLAR_ENDONLYメタ文字 $(ドル) は検索対象文字列の最後にのみマッチします。修飾子m が設定されている場合は無視されます。
uPCRE_UTF8正規表現パターンと検索対象文字列をUTF-8として処理します。

正規表現とは?ざっくり把握

POINT

  • 正規表現とは文字列の集合をパターン化して表現する文字列
    例えば、
    [0-9] は全ての半角数字という意
    '^pen' は pen という文字列で始まるという意
  • 正規表現とはパターン化された文字列 = 正規表現
  • 正規表現は専用の関数 preg_match() と合わせて利用する

正規表現とは?

正規表現とは文字列の集合を「パターン化して表現する文字列」のことです。例えば、正規表現では、「全ての半角数字」という文字列の集合を「[0-9]」というような形で表現します。「[0-9]」がパターン化された正規表現の文字列です。他には、「penという文字列で始まる」を正規表現で表す場合「'^pen'」となります。^ はチルダという記号ですが、正規表現では 「~から始まる」という行頭の意味があります。これを特殊文字(メタ文字)と言います。後程詳しく説明します。

このように、ある文字列が「数字」であるか、「特定の文字で始まる」か、など正規表現でパターン化された文字列と照らし合わせて、調べることができます。正規表現は専用の関数 preg_match() と合わせて利用します。preg_match()などのPerl互換の正規表現関数(PCRE関数)では、正規表現をデミリタ(delimiters)で囲う必要があります。デミリタは特定の領域の境界を示す文字のことです。デリミタとして良く利用される文字は、「/ (スラッシュ)」「# (ハッシュ記号)」「˜ (チルダ)」などです。以下の例では、「/ (スラッシュ)」を利用しています。

正規表現は専用の関数 preg_match()

一致は 1、不一致は 0 = preg_match(正規表現の文字列, 検索する文字列, [検索結果の配列]);
//[検索結果の配列]は省略可能です。
PHPバージョンPHP4 PHP5 PHP7 PHP8
動作preg_match()関数は、【パターン化された文字列=正規表現】で【文字列】を検索します。検索で一致すれば数字の 1 を返し、不一致の場合は数字の 0 を返します。エラーの場合は、FALSE を返します。
正規表現の文字列正規表現の文字列を "((シングルクォート=引用符) ) や '(ダブルクォート=二重引用符) で囲みます。さらに内側を デリミタ(スラッシュやシャープなどが利用可能)で囲みます。
"/正規表現/"
'/正規表現/'
検索する文字列正規表現で検索したい文字列を指定します。
検索結果の配列配列に $matches と指定した場合、正規表現パターンマッチした文字列が代入されます。どの文字列が正規表現パターンにマッチしたのか確認することが出来ます。
返り値一致の場合 1 、不一致の場合 0 、エラーの場合 論理値 FALSE

簡単な正規表現の例

簡単な正規表現の例を見てみましょう。以下の例では p.n という正規表現で This is a pen という文字列を検索します。デミリタは「/ (スラッシュ)」です。「.(ピリオド)」は正規表現で 任意の1文字 という意味になります。正規表現は検索対象の文字列の中に「p 任意の1文字 n」というパターンがあるかどうかを検索します。

pen の部分が正規表現パターンに一致するので、結果は

一致

となります。

以下の例の正規表現は「 [0-9] 」の部分です。「 [ ](角括弧)」で文字クラスと「 (ハイフン)」で範囲を指定しています。デミリタは「/ (スラッシュ)」です。0-9全ての数字という意になります。[ ][ ]内のいずれかの1文字という意になります。先ほどの例の「.(ピリオド)」と同じで、[ ] は正規表現内で特別な意味を持ちます。[0-9] は、0~9 の数字が1文字あるかでマッチします
例:

結果は

数字はありません。
数字があります。

となります。

それでは以下の例はどうでしょうか?先程の例の一番目では検索対象となる文字列が abcdefg でしたが、次の例では abcd1efg となっています。正規表現は「 /[0-9]/ 」と同じです。

結果は

数字があります。

となります。
検索の対象となる文字列 abcd1efg には数字の 1 が含まれています。0~9 の数字が1文字でもあるとマッチするのです。逆に数字しか許さない場合、否定を意味する ^(キャレット)を使用して表現できます。以下の例は、数字以外が1文字でもあればマッチする、となります。つまり、すべて数字かどうが判定できます。

結果は

数字のみではありません。
数字のみではありません。
数字のみです。

となります。

ルールを覚えましょう!

上述した例でも分かるように、意図したものと実際の動作を合わせるには、正規表現を正しく覚える必要があります。正規表現には多くのルールがあり、このルールを組み合わせることで多様な表現を作成できます。正規表現を利用すれば、ある文字列が「メールアドレス」であるか「URL」であるかなどを調べることも可能です。つまり、ある文字列に対して複雑な検索を行う場合に検索パターンを指定するのが正規表現になります

PHPの正規表現の種類

POSIXは、PHP5.3.0で非推奨(deprecated)となり、PHP7.0.0で削除されたので、Perl互換(PCRE)を使用して下さい。

POINT

  • PHPの正規表現は POSIX の正規表現と Perl互換(PCRE) の正規表現の2種類ある
  • POSIXの正規表現 読みやすい
    POSIXでは ereg() 関数を使用 ※PHP5.3で非推奨
  • Perl互換(PCRE)の正規表現 機能・速度が優れている
    PCREでは preg_match() 関数を使用
  • Perl互換の正規表現では POSIX形式の文字クラスやアンカー等も利用 できる

PHPではPOSIXの正規表現Perl互換(PCRE)の正規表現の2種類をサポートしています。

POSIXの正規表現は読みやすいという特徴があります。Perl互換の正規表現は機能的にも速度的にもPOSIXより優れています。

また、正規表現とのマッチに使用する専用の関数が用意されており、POSIX正規表現とのマッチを行う関数はereg()関数で、Perl互換の正規表現とのマッチを行う関数はpreg_match()関数です。

Perl互換(PCRE) の 正規表現 と POSIX の 正規表現 の違い

POSIXは、PHP5.3.0で非推奨(deprecated)となり、PHP7.0.0で削除されたので、Perl互換(PCRE)を使用して下さい。
Perl互換(PCRE) の 正規表現 と POSIX の 正規表現 には違いがあります。使用する関数の違いや、デミリタ使用の有無、大文字小文字の区別の有無などです。

POINT

  • PCREの正規表現関数では、パターンを デリミタ で囲う必要があります。
  • PCREの正規表現関数では、大文字小文字を必ず区別します。パターン修飾子 i (PCRE_CASELESS) で大文字小文字両方にマッチする動作を指定出来ます。POSIXの正規表現関数は、大文字小文字を区別しない eregi() 関数があります。
  • POSIXの正規表現関数は、いちばん左側にある最も長くマッチするパターンを探します。一方 PCREの正規表現関数では、マッチするパターンが最初に見つかった時点で処理を終了します。マッチするパターンがある場合は結果や処理速度に大きな影響が出る可能性があります。
  • POSIX における “文字クラス” の定義は PCRE とは異なります。

正規表現の関数
POSIXPCRE動作
ereg()preg_match()マッチング/取り出し
eregi()
※大文字小文字区別なし
preg_match()
※i修飾子で区別なし
マッチング/取り出し
sql_regcase()
※大文字小文字区別なし
preg_match()
※i修飾子で区別なし
マッチング/取り出し
ereg_replace()preg_replace()置換
eregi_replace()
※大文字小文字区別なし
preg_replace()
※i修飾子で区別なし
置換
split()preg_split()分割
spliti()
※大文字小文字区別なし
preg_split()
※i修飾子で区別なし
分割

正規表現の活用

正規表現の代表的な活用方法は、マッチングで数字を返す、取り出し、差し替え、分割です。

POINT

  • マッチング preg_match():正規表現にマッチした場合 1 、しなかった場合 0 の数字を返し、エラーの場合 FALSE を返す
  • 取り出し preg_match():正規表現にマッチした部分を取り出す
  • 差し換え preg_replace():正規表現にマッチした部分を別の文字列に差し換える
  • 分割 preg_split():正規表現にマッチした部分を幾つかの文字列に分割する
  • ※ereg()関数は PHP5.3 で非推奨となりました。

正規表現は、ある文字列に対して複雑な検索を行う場合に検索パターンを指定するものと説明しましたが、ある文字列が検索パターンにマッチした場合に幾つかの処理方法がありますマッチングで数字を返す、取り出し、差し替え、分割 です。これらの処理にあわせた関数が用意されているので、正規表現と専用の関数を組み合わせて処理を行います。

正規表現と組み合わせて利用する関数を紹介します。

マッチング preg_match()

preg_match() — 正規表現によるマッチングを行います。

一致は 1、不一致は 0 = preg_match(正規表現, 文字列 [, $matches, フラグ]);
//[ ]省略可能

結果は

一致

となります。

取り出し preg_match()

preg_match() — 3つ目の引数を指定し正規表現にマッチした部分を取出します。

結果 = preg_match(正規表現, 文字列 [, $matches, フラグ]);
//[ ]省略可能

引数の $matches を設定した場合、結果の $matches[0] には正規表現のパターン全体に一致した文字列が代入されます。次の $matches[1] からは順次サブパターンに一致した文字列が代入されていきます。

結果は

array(4) { [0]=> string(17) "applebananaorange" [1]=> string(5) "apple" [2]=> string(6) "banana" [3]=> string(6) "orange" }

となります。

置換 preg_replace()

preg_replace() – 正規表現検索および置換を行います。

結果 = preg_replace(正規表現, 置換する文字列や配列, 入力文字列);
//[ ]省略可能

※正規表現の '/\s/' は 空白の" " 、 キャリッジリターンの\r 、 タブの\t 、 改行の\n 、 改ページの\f のすべてを表します。

結果は

try php

となります。

分割 preg_split()

preg_split() – 正規表現で文字列を分割します。

配列 = preg_split(正規表現, 入力文字列);
//[ ]省略可能

※正規表現の '/\s/' は 空白の" " 、 キャリッジリターンの\r 、 タブの\t 、 改行の\n 、 改ページの\f のすべてを表します。
サンプルコードは両方結果は同じです。
結果は

Array
(
[0] => t
[1] => r
[2] => y
[3] => p
[4] => h
[5] => p
)

となります。

正規表現のマッチ動作

正規表現を表す文字は殆どリテラル文字です。その文字自身にマッチすることを意味します。リテラルとは値そのもののことです。それでは例題を見ながらマッチ動作を確認していきましょう。

例題(1)

正規表現 'TOM' と 文字列「This pen is given from a TOM last year. I am very much pleased with this pen.」のマッチ動作をみてみる。

結果は

一致

となります。

マッチ動作の説明
正規表現は最初に T を探します。 T が見つかれば次の文字が O であるか調べます。 O であれば次の文字が M であるか調べます。M であれば正規表現はマッチ処理を完了して 数字の 1 を返します。
T の次が O でなければ再度次の T を探します。TO の次が M でなければ再度次の T を探します。
T が見つからない、 T の次の O が見つからない、 TO の次の M が見つからない、これらの場合はマッチ処理を終了して数字の 0 を返します。

例題(2)

This is a pen」の文字列に対して正規表現 'pen' でマッチを行うと、文字列中に pen があるかを調べられます。

結果は

一致

となります。

マッチ動作の説明
正規表現は最初に p を探します。 p が見つかれば次の文字が e であるか調べます。 e であれば次の文字が n であるか調べます。n であれば正規表現はマッチ処理を完了して 数字の 1 を返します。
p の次が e でなければ再度次の p を探します。pe の次が n でなければ再度次の p を探します。
p が見つからない、 p の次の e が見つからない、 pe の次の n が見つからない、これらの場合はマッチ処理を終了して数字の 0 を返します。

例題(3)

正規表現 'pen' と 文字列「This is a book」のマッチ動作を見てみる。
以下は「This is a book」の文字列に対して正規表現 'pen' でマッチを行っています。

結果は

不一致

となります。

マッチ動作の説明
正規表現は最初に p を探します。 p が見つからないので正規表現はマッチを終了して 数字の 0 を返します。

例題(3)

正規表現 'ghi' と 文字列「abcde fghij klmno」のマッチ動作を見てみる。
以下は「abcde fghij klmno」の文字列に対して正規表現 'ghi' でマッチを行っています。

結果は

一致

となります。

マッチ動作の説明
正規表現は最初に g を探します。 g が見つかれば次の文字が h であるか調べます。 h であれば次の文字が i であるか調べます。i であれば正規表現はマッチ処理を完了して 数字の 1 を返します。
g の次が h でなければ再度次の g を探します。gh の次が i でなければ再度次の g を探します。
g が見つからない、 g の次の h が見つからない、 gh の次の i が見つからない、これらの場合はマッチ処理を終了して数字の 0 を返します。

正規表現の大文字小文字

POINT

  • 正規表現では大文字小文字を区別する

正規表現では大文字小文字を区別します。従って、以下の場合、正規表現の 'pen' は文字列中の「Pen」にマッチしません。

結果は

不一致

となります。

大文字小文字を区別させない場合は、パターン修飾子 i を指定します。

結果は

一致

となります。

正規表現で特殊な意味を持つ文字(メタ文字)

POINT

  • 正規表現で特別な意味を持つ文字
    \ (バックスラッシュ)
    ^ (キャレット)
    $ (ドル)
    . (ドット)
    ? (クエッション)
    * (アスタリスク)
    + (プラス)

正規表現を記述する場合に、特別な意味を表す文字が幾つかあります。これらの文字はより豊かな表現を実装するために必要不可欠な文字です。


\ (バックスラッシュ)

\正規表現中で特別な意味を持つ文字(メタ文字)が幾つかありますが、それらの特殊文字を普通の文字として扱う場合に、その特殊文字の前に「\(バックスラッシュ)」付けます。「\(バックスラッシュ)」を付けることで正規表現の特殊文字を普通の文字として扱います。

「. (ドット)」や「+ (プラス)」は正規表現内では特殊な意味を持つ文字となります。このような文字を通常の文字として扱う場合は、その文字の前に「\ (バックスラッシュ)」記号を配置します。

正規表現内で特殊文字をそのまま使用した場合。

結果は

不一致

となります。

正規表現内で特殊文字の前に「\」記号を配置した場合。

結果は

一致

となります。


^ (キャレット)

^検索条件の表現を表します。
文字列の先頭から正規表現でマッチさせる場合に使用します。
この特殊文字の次に指定された文字列で始まっていれば」条件に適合したと判断します。

以下の例では特殊文字「^」の次に指定されている This で始まる文字列であれば条件に適合したと判断されます。
※文字クラスの [ ] 内で使用すると否定の意になります。文字クラスの否定 「 ^ (キャレット) 」を使用

結果は

一致

となります。

結果は

不一致

となります。


$ (ドル)

$検索条件の表現を表します。
文字列の最後の部分と正規表現でマッチさせる場合に使用します。
この特殊文字の前に指定された文字列で終っていれば」条件に適合したと判断します。

以下の例では特殊文字「$」の前に指定されている a pen で終わる文字列であれば条件に適合したと判断されます。

結果は

一致

となります。

結果は

不一致

となります。


. (ドット)

.検索条件の表現を表します。
文字列の任意の一字にマッチさせる場合に使用します。
\n (改行)以外の任意の文字を表します。

結果は

一致

となります。

結果は

一致

となります。

結果は

一致

となります。

結果は

不一致

となります。


? (クエッション)

?検索条件の表現を表します。
この文字の前に指定された文字が1個だけ使われているか、あるいは使われていない場合「0回あるいは1回ということ」に条件に適合したと判断します。

以下の場合「o」は「0回」使用されているので、

結果は

一致

となります。

以下の場合「o」は「1回」使用されているので、

結果は

一致

となります。

以下の場合「o」は「2回」使用されているので、

結果は

不一致

となります。


* (アスタリスク)

*検索条件の表現を表します。
この文字の前に指定された文字が0個以上使われていれば、条件に適合したと判断します。

以下の場合「o」は「0回」使用されているので、

結果は

一致

となります。

以下の場合「o」は「0回以上」使用されているので、

結果は

一致
一致

となります。


+ (プラス)

+検索条件の表現を表します。
この文字の前に指定された文字が1個以上使われていれば、条件に適合したと判断します。

以下の場合「o」は「0回」なので、

結果は

不一致

となります。

以下の場合「o」は「1回以上」使用されているので、

結果は

一致

となります。

文字クラス

POINT

  • 文字クラスとは文字のパターン
  • 文字クラスは [ ](角括弧)で指定
  • 文字クラスは自分で定義可能。また、定義済み文字クラスもある

文字クラスとは、正規表現を作成する際対象となる文字のパターンを指定するのに利用します。対象となる文字は「[ ](角括弧)」内で指定します。文字クラスは自分で定義することが出来ます。また、定義済みの文字クラスを利用することも出来ます。


文字クラスの作成 「 [・・・] (角括弧) 」を使用

それでは文字クラスを作成してみましょう。文字クラスを作成するには、「 [・・・] (角括弧) 」を使用します。以下は文字列に対して正規表現の文字クラスを表す 'd[aiueo]g' でマッチを行っています。文字クラス [aiueo] は、 a i u e o の何れか という意味になります。

例:

結果は

一致
不一致

となります。

マッチ動作の説明
正規表現は最初に d を探します。 d が見つかれば次の文字が a i u e o の何れかであるか調べます。 a i u e o の何れかであれば次の文字が g であるか調べます。 g であれば正規表現はマッチ処理を完了して数字の 1 を返します。
d の次が a i u e o の何れかでなかった場合は再度次の d を探します。d [ a i u e o ] の次が g でなかった場合は再度次の d を探します。
d が見つからない、 d の次の a i u e o の何れかが見つからない、d [ a i u e o ] の次の g が見つからない場合はマッチ処理を終了して数字の 0 を返します。


文字クラスの否定 「 ^ (キャレット) 」を使用

文字クラスの否定を行うには、クラスの先頭に「^(キャレット)」を配置します。

例えば、[^abc] とすると、abc以外の文字という意味になります。

以下は文字列に対して正規表現の文字クラス否定を表す 'd[^aiueo]g' でマッチを行っています。

例:

結果は

不一致
一致

となります。

マッチ動作の説明
正規表現は最初に d を探します。 d が見つかれば次の文字が a i u e o の何れか 以外 であるか調べます。 a i u e o の何れか 以外 であれば次の文字が g であるか調べます。 g であれば正規表現はマッチ処理を完了して数字の 1 を返します。
d の次が a i u e o の何れか 以外 でなかった場合は再度次の d を探します。d [ a i u e o ]以外 の次が g でなかった場合は再度次の d を探します。
d が見つからない、 d の次の a i u e o 以外 の何れかが見つからない、d [ a i u e o ]以外 の次の g が見つからない場合はマッチ処理を終了して数字の 0 を返します。


文字クラス範囲 「 – (ハイフン) 」

文字クラスの範囲を指定するには、「-(ハイフン)」を使用します。
例えば [0-9][0123456789] と同じ意味で、全ての半角数字を意味します。
[a-z][abcdefghijklmnopqrstuvwxyz] と同じ意味で、全ての半角小文字アルファベットを意味します。

その他に、
[ぁ-んー] ひらがなを表します。
[ァ-ヶー] カタカナを表します。
[a-zA-Z] 半角小文字大文字アルファベットを表します。
[0-9] 半角数字を表します。
などがあります。

例:

結果は

一致
不一致

となります。

マッチ動作の説明
正規表現は最初に 0 から9 何れかの数字を探します。 数字が見つからなければ検索を終了して数字の 0 を返します。数字が見つかれば次の文字が 円 であるか調べます。 円 でなかった場合は再度次の 0 から9 何れかの数字を探します。 円 であれば正規表現はマッチ処理を完了して数字の 1 を返します。0 から9 何れかの数字の次の 円 が見つからなければ正規表現はマッチ処理を完了して数字の 0 を返します。

文字クラス早見表

文字クラス
正規表現読み動作
[ ]角括弧対象となる文字のパターンを指定する
※自分で作成する/定義済み文字クラスの使用 の2種類がある
[aiueo]a i u e o の何れか
[0-9]0 ~ 9 の何れかで、[0123456789]と同じ意
※- (ハイフン)は文字クラス内で範囲を指定する
[a-z]小文字 a ~ z の何れかで、[abcdefghijklmnopqrstuvwxyz]と同じ意
※- (ハイフン)は文字クラス内で範囲を指定する
[A-Z]大文字 A ~ Z の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
[a-zA-Z0-9]アルファベットか数字の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
[ぁ-んー]ひらがな の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
※日本語を扱う場合 修飾子 u を指定
[ァ-ヶー]カタカナ の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
※日本語を扱う場合 修飾子 u を指定
[一-龠]漢字 の何れか
※- (ハイフン)は文字クラス内で範囲を指定する
※日本語を扱う場合 修飾子 u を指定
[!#<>:;&~@%+$"\'\*\^\(\)\[\]\|\/\.,_-]指定記号 の何れか
※- (ハイフン)は文字クラス内で範囲を指定する


文字クラス内部の特殊文字

文字クラス内部では正規表現で特殊な意味を持つ特殊文字の扱いが変わることがあります。

POINT

  • $ (ドル)」は文字クラス内部では通常の記号となります。
    文字の終わりという意味はなくなります。
  • . (ピリオド)」は文字クラス内部では通常の記号となります。
    任意の一文字という意味はなくなります。
  • ^ (キャレット)」開始括弧直後に配置された場合に否定を意味します。文字の先頭という意味はなくなります。

以下は、

[^\]]

] 」 以外の文字すべてという意味です。

結果は

不一致

となります。
「 ] 」以外の文字であれば全て一致なのですが、唯一「 ] 」のみ不一致なので、結果は不一致となります。

以下は、

[$^.]

「 $ ^ . 」 各文字の何れかという意味です。

結果は

一致
一致
不一致

となります。
最後の検索対象文字列は「 abcdefghigklmn 」であり、$ ^ . の何れもありませんので、不一致となります。

選択肢「 | (パイプ)」

POINT

  • | (パイプ)」で選択肢の作成

「 | (パイプ)」を使用して正規表現内で選択肢を作成できます。
例えば

'bag|hat'

これは、bag か hat どちらかの文字列がある場合という意味になります。

結果は

一致

となります。

結果は

不一致

となります。

繰り返し(量指定子)

POINT

  • 繰り返し(量指定子)のパターンを作成
    ? 0回または1回
    * 0回以上
    + 1回以上
    {n} n回
    {n,} n回以上
    {n, m} n回以上、m回以下

正規表現で何度繰り返すか繰り返しのパターンを指定することが出来ます。この繰り返しを表現するのが量指定子になります。

例えば

'boa*t'

の場合、量指定子の部分、「 a* 」は、 a が 0回以上 という意なので、bot boat boaaaaaaaaaat の何れでもマッチします。

また、量子定子は次の要素の後ろに配置することが出来ます。

  • 個々の文字 の後ろ。エスケープされた文字も含まれます。'/a?bc/'
  • 特殊文字 . (ドット) の後ろ '/a.*c/'
  • 文字クラス の後ろ '/a[bcd]{3}e/'
  • サブパターン の後ろ '/(abc){3}e/'

それでは、各量指定子の動作を確認してみましょう。


「 ? 」0回または1回

量指定子 ? は、0回または1回を意味します。

結果は

一致
不一致

となります。


「 * 」0回以上

量指定子 * は、0回以上を意味します。

結果は

一致
一致

となります。


「 + 」 1回以上

量指定子 + は、1回以上を意味します。

結果は

一致
不一致

となります。


「 {n} 」n回

量指定子 {n} は、n回を意味します。

結果は

一致
不一致

となります。


「{n,}」n回以上

量指定子 {n,} は、n回以上を意味します。

結果は

一致
不一致

となります。


「{n,m}」n回以上、m回以下

量指定子 {n,m} は、n回以上 m回以下を意味します。

結果は

一致
一致
不一致

となります。

サブパターン(単位を作る)

POINT

  • () 括弧 でサブパターンを作成

「 () 」括弧で囲むとその部分を1つの単位として扱うことができます。

例えば

'( word){2}'

word 」の文字列が正確に2回という意味になります。

結果は

一致
不一致

となります。

メタ文字(特殊文字)

POINT

  • メタ文字は 正規表現(パターン文字列)中 で 繰り返し選択肢 などを表現することが出来る特殊文字

メタ文字(meta-character)とは、正規表現(パターン文字列)中で、繰り返し や 選択肢 などを表現することが出来る特殊文字です。メタ文字は、その文字自体を表すことはなく、特別な意味を持っており、その意味として解釈されます。正規表現(パターン文字列)は、このメタ文字によって、多様な表現を作ることが出来ます。

メタ文字には、2種類あります。ひとつは、「 [ ] (角括弧)」外で、正規表現(パターン文字列)中のどこででも使用できる文字です。もうひとつは、 「 [ ] (角括弧)」内で使用できる文字です。

\ エスケープ文字
^ 文字列の先頭
$ 文字列の末尾

. 改行を除く任意の1文字
? 0または1回だけの文字
* 0回以上の連続する文字
+ 1回以上の連続する文字

| OR

[] 文字クラス
() パターングループ

{} 量指定子

\n 改行
\r キャリッジリターン
\t タブ
\d 数字 [0-9]
\D 数字以外 [^0-9]
\w 英数字 [_a-zA-Z0-9]
\W 英数字以外 [^_a-zA-Z0-9]
\s 空白 [ \t \r\f]
\S 空白以外 [^ \t\n\r\f]
\b 単語境界 \w、\Wの間
\B 単語境界以外
\x?? 16進数

サンプルコード

– サンプル Click Here ! –

– サンプル Click Here ! –


タグ(=記事関連ワード)

タグ: ,

日付

公開日:2017年4月9日
最終更新日:2024年11月14日

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

https://wepicks.net/phpref-regular_expression/trackback/

page top