UPDATE:2024年11月14日
PHPの正規表現 初心者向け基本~ 早見表掲載!
【正規表現 早見表!】
正規表現 早見表!
※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 を指定 | |||
| ||||
[!#<>:;&~@%+$"\'\*\^\(\)\[\]\|\/\.,_-] | 指定記号 の何れか※- (ハイフン)は文字クラス内で範囲を指定する | |||
|
量指定子(繰り返し) | ||||
---|---|---|---|---|
量子定子は次の要素の後ろに配置することが出来ます。
| ||||
正規表現 | 読み | 動作 | ||
? | クエッション | 0回または1回の出現 | ||
| ||||
* | アスタリスク | 0回以上の繰り返し出現 | ||
| ||||
+ | プラス | 1回以上の繰り返し出現 | ||
| ||||
{n} | 波括弧 | n回の繰り返し出現 | ||
| ||||
{n,} | 波括弧 | n回以上 の繰り返し出現 | ||
| ||||
{n,m} | 波括弧 | n回以上 – m回以下 の繰り返し出現 | ||
|
特殊文字(メタ文字) | ||||
---|---|---|---|---|
正規表現 | 読み | 動作 | ||
\ | バックスラッシュ | 直後の特殊文字(=メタ文字)を普通の文字として扱う(=エスケープする) | ||
| ||||
^ | キャレット | 文字列の先頭、この特殊文字の次に指定された文字列で始まっていれば という意 ※文字クラスで使用すると否定の意 | ||
| ||||
$ | ドル | この特殊文字の前に指定された文字列で終っていれば という意 ※文字クラスで使用すると通常の文字の意 | ||
| ||||
. | ドット | 任意の1文字を表す【\n (改行)以外】 ※文字クラスで使用すると通常の文字の意 | ||
| ||||
? | クエッション | 0回または1回の出現 | ||
| ||||
* | アクタリスク | 0回以上の繰り返し出現 | ||
| ||||
+ | プラス | 1回以上の繰り返し出現 | ||
| ||||
| | パイプ | 選択肢の作成。ORの意 | ||
|
特殊文字(メタ文字)※ [ ] 内で使用 | ||||
---|---|---|---|---|
正規表現 | 読み | 動作 | ||
^ | キャレット | 文字クラスの否定の意。クラスの先頭に ^(キャレット)を配置 | ||
| ||||
$ | ドル | [ ] の文字クラス内部では通常の記号となる | ||
| ||||
. | ピリオド | [ ] の文字クラス内部では通常の記号となる | ||
| ||||
– | ハイフン | 文字列の範囲を指定 | ||
|
特殊文字 | ||||
---|---|---|---|---|
正規表現 | 読み | 動作 | ||
( ) | 小括弧 | サブパターン(単位)を作る。1つの単位として扱うことができる。 | ||
| ||||
{ } | 中括弧 | 量指定子 | ||
[ ] | 大括弧 | 文字クラスを作る |
パターン修飾子 | ||
---|---|---|
記号 | PCRE 内部名前 | 動作 |
i | PCRE_CASELESS | 正規表現パターンの文字は検索対象文字列の大文字にも小文字にもマッチします。 |
m | PCRE_MULTILINE | 改行 "\n"がある 複数行 の検索対象文字列を 1行 として処理します。この修飾子を指定すると、行頭メタ文字の ^ と 行末メタ文字の $ が検索対象文字列の行頭と行末に加えて、各改行 "\n" の直前と直後にそれぞれマッチします。 |
s | PCRE_DOTALL | メタ文字の .(ピリオド)が 改行 "\n" にもマッチするようになります。設定しない場合、改行 "\n" 以外のすべての文字にマッチします。 |
A | PCRE_ANCHORED | 正規表現パターンは検索対象文字列の先頭でのみマッチングするように固定されます。 |
D | PCRE_DOLLAR_ENDONLY | メタ文字 $(ドル) は検索対象文字列の最後にのみマッチします。修飾子m が設定されている場合は無視されます。 |
u | PCRE_UTF8 | 正規表現パターンと検索対象文字列をUTF-8として処理します。 |
正規表現とは?ざっくり把握
- 正規表現とは文字列の集合をパターン化して表現する文字列
例えば、
[0-9] は全ての半角数字という意
'^pen' は pen という文字列で始まるという意 - 正規表現とはパターン化された文字列 = 正規表現
- 正規表現は専用の関数 preg_match() と合わせて利用する
正規表現とは?
正規表現とは文字列の集合を「パターン化して表現する文字列」のことです。例えば、正規表現では、「全ての半角数字」という文字列の集合を「[0-9]」というような形で表現します。「[0-9]」がパターン化された正規表現の文字列です。他には、「penという文字列で始まる」を正規表現で表す場合「'^pen'」となります。^ はチルダという記号ですが、正規表現では 「~から始まる」という行頭の意味があります。これを特殊文字(メタ文字)と言います。後程詳しく説明します。
このように、ある文字列が「数字」であるか、「特定の文字で始まる」か、など正規表現でパターン化された文字列と照らし合わせて、調べることができます。正規表現は専用の関数 preg_match() と合わせて利用します。preg_match()などのPerl互換の正規表現関数(PCRE関数)では、正規表現をデミリタ(delimiters)で囲う必要があります。デミリタは特定の領域の境界を示す文字のことです。デリミタとして良く利用される文字は、「/ (スラッシュ)」「# (ハッシュ記号)」「˜ (チルダ)」などです。以下の例では、「/ (スラッシュ)」を利用しています。
正規表現は専用の関数 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」というパターンがあるかどうかを検索します。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/p.n/', 'This is a pen')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
pen の部分が正規表現パターンに一致するので、結果は
となります。
以下の例の正規表現は「 [0-9] 」の部分です。「 [ ](角括弧)」で文字クラスと「 –(ハイフン)」で範囲を指定しています。デミリタは「/ (スラッシュ)」です。0-9 は全ての数字という意になります。[ ] は [ ]内のいずれかの1文字という意になります。先ほどの例の「.(ピリオド)」と同じで、[ ] や – は正規表現内で特別な意味を持ちます。[0-9] は、0~9 の数字が1文字あるかでマッチします。
例:
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/[0-9]/', 'abcdefg')) echo "数字があります。<br>\n"; else echo "数字はありません。<br>\n"; if(preg_match('/[0-9]/', '0394587')) echo "数字があります。<br>\n"; else echo "数字はありません。<br>\n"; ?> |
結果は
数字があります。
となります。
それでは以下の例はどうでしょうか?先程の例の一番目では検索対象となる文字列が abcdefg でしたが、次の例では abcd1efg となっています。正規表現は「 /[0-9]/ 」と同じです。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/[0-9]/', 'abcd1efg')) echo "数字があります。<br>\n"; else echo "数字はありません。<br>\n"; ?> |
結果は
となります。
検索の対象となる文字列 abcd1efg には数字の 1 が含まれています。0~9 の数字が1文字でもあるとマッチするのです。逆に数字しか許さない場合、否定を意味する ^(キャレット)を使用して表現できます。以下の例は、数字以外が1文字でもあればマッチする、となります。つまり、すべて数字かどうが判定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php if(preg_match('/[^0-9]/', 'abcd1efg')) echo "数字のみではありません。<br>\n"; else echo "数字のみです。<br>\n"; if(preg_match('/[^0-9]/', '01234a56789')) echo "数字のみではありません。<br>\n"; else echo "数字のみです。<br>\n"; if(preg_match('/[^0-9]/', '0123456789')) echo "数字のみではありません。<br>\n"; else echo "数字のみです。<br>\n"; ?> |
結果は
数字のみではありません。
数字のみです。
となります。
ルールを覚えましょう!
上述した例でも分かるように、意図したものと実際の動作を合わせるには、正規表現を正しく覚える必要があります。正規表現には多くのルールがあり、このルールを組み合わせることで多様な表現を作成できます。正規表現を利用すれば、ある文字列が「メールアドレス」であるか「URL」であるかなどを調べることも可能です。つまり、ある文字列に対して複雑な検索を行う場合に検索パターンを指定するのが正規表現になります。
PHPの正規表現の種類
POSIXは、PHP5.3.0で非推奨(deprecated)となり、PHP7.0.0で削除されたので、Perl互換(PCRE)を使用して下さい。
- 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 の 正規表現 の違い
Perl互換(PCRE) の 正規表現 と POSIX の 正規表現 には違いがあります。使用する関数の違いや、デミリタ使用の有無、大文字小文字の区別の有無などです。
- PCREの正規表現関数では、パターンを デリミタ で囲う必要があります。
- PCREの正規表現関数では、大文字小文字を必ず区別します。パターン修飾子 i (PCRE_CASELESS) で大文字小文字両方にマッチする動作を指定出来ます。POSIXの正規表現関数は、大文字小文字を区別しない eregi() 関数があります。
- POSIXの正規表現関数は、いちばん左側にある最も長くマッチするパターンを探します。一方 PCREの正規表現関数では、マッチするパターンが最初に見つかった時点で処理を終了します。マッチするパターンがある場合は結果や処理速度に大きな影響が出る可能性があります。
- POSIX における “文字クラス” の定義は PCRE とは異なります。
正規表現の関数 | ||
---|---|---|
POSIX | PCRE | 動作 |
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修飾子で区別なし | 分割 |
正規表現の活用
- マッチング preg_match():正規表現にマッチした場合 1 、しなかった場合 0 の数字を返し、エラーの場合 FALSE を返す
- 取り出し preg_match():正規表現にマッチした部分を取り出す
- 差し換え preg_replace():正規表現にマッチした部分を別の文字列に差し換える
- 分割 preg_split():正規表現にマッチした部分を幾つかの文字列に分割する
※ereg()関数は PHP5.3 で非推奨となりました。
正規表現は、ある文字列に対して複雑な検索を行う場合に検索パターンを指定するものと説明しましたが、ある文字列が検索パターンにマッチした場合に幾つかの処理方法があります。マッチングで数字を返す、取り出し、差し替え、分割 です。これらの処理にあわせた関数が用意されているので、正規表現と専用の関数を組み合わせて処理を行います。
正規表現と組み合わせて利用する関数を紹介します。
マッチング preg_match()
//[ ]省略可能
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/pen/', 'This is a pen.')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
取り出し preg_match()
//[ ]省略可能
引数の $matches を設定した場合、結果の $matches[0] には正規表現のパターン全体に一致した文字列が代入されます。次の $matches[1] からは順次サブパターンに一致した文字列が代入されていきます。
1 2 3 4 5 | <!-- サンプルコード --> <?php preg_match('/(apple)(banana)(orange)/', 'applebananaorange', $matches); var_dump($matches); ?> |
結果は
となります。
置換 preg_replace()
//[ ]省略可能
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $string = 'try php'; $string = preg_replace('/\s\s+/', ' ', $string); echo $string."<br>\n"; ?> |
※正規表現の '/\s/' は 空白の" " 、 キャリッジリターンの\r 、 タブの\t 、 改行の\n 、 改ページの\f のすべてを表します。
結果は
となります。
分割 preg_split()
//[ ]省略可能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!-- サンプルコード --> <?php $string = 't r y p h p'; $array = preg_split('/\s/', $string); echo '<pre>'; print_r($array); echo '</pre>'; ?> <?php $string = 't r y p h p'; $array = preg_split('/ /', $string); echo '<pre>'; print_r($array); echo '</pre>'; ?> |
※正規表現の '/\s/' は 空白の" " 、 キャリッジリターンの\r 、 タブの\t 、 改行の\n 、 改ページの\f のすべてを表します。
サンプルコードは両方結果は同じです。
結果は
(
[0] => t
[1] => r
[2] => y
[3] => p
[4] => h
[5] => p
)
となります。
正規表現のマッチ動作
例題(1)
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/TOM/', 'This pen is given from a TOM last year. I am very much pleased with this pen.')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
正規表現は最初に T を探します。 T が見つかれば次の文字が O であるか調べます。 O であれば次の文字が M であるか調べます。M であれば正規表現はマッチ処理を完了して 数字の 1 を返します。
T の次が O でなければ再度次の T を探します。TO の次が M でなければ再度次の T を探します。
T が見つからない、 T の次の O が見つからない、 TO の次の M が見つからない、これらの場合はマッチ処理を終了して数字の 0 を返します。
例題(2)
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/pen/', 'This is a pen')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
正規表現は最初に p を探します。 p が見つかれば次の文字が e であるか調べます。 e であれば次の文字が n であるか調べます。n であれば正規表現はマッチ処理を完了して 数字の 1 を返します。
p の次が e でなければ再度次の p を探します。pe の次が n でなければ再度次の p を探します。
p が見つからない、 p の次の e が見つからない、 pe の次の n が見つからない、これらの場合はマッチ処理を終了して数字の 0 を返します。
例題(3)
以下は「This is a book」の文字列に対して正規表現 'pen' でマッチを行っています。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/pen/', 'This is a book')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
正規表現は最初に p を探します。 p が見つからないので正規表現はマッチを終了して 数字の 0 を返します。
例題(3)
以下は「abcde fghij klmno」の文字列に対して正規表現 'ghi' でマッチを行っています。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/ghi/', 'abcde fghij klmno')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
正規表現は最初に g を探します。 g が見つかれば次の文字が h であるか調べます。 h であれば次の文字が i であるか調べます。i であれば正規表現はマッチ処理を完了して 数字の 1 を返します。
g の次が h でなければ再度次の g を探します。gh の次が i でなければ再度次の g を探します。
g が見つからない、 g の次の h が見つからない、 gh の次の i が見つからない、これらの場合はマッチ処理を終了して数字の 0 を返します。
正規表現の大文字小文字
- 正規表現では大文字小文字を区別する
正規表現では大文字小文字を区別します。従って、以下の場合、正規表現の 'pen' は文字列中の「Pen」にマッチしません。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/pen/', 'This is a Pen.')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
大文字小文字を区別させない場合は、パターン修飾子 i を指定します。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/pen/i', 'This is a Pen.')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
正規表現で特殊な意味を持つ文字(メタ文字)
- 正規表現で特別な意味を持つ文字
\ (バックスラッシュ)
^ (キャレット)
$ (ドル)
. (ドット)
? (クエッション)
* (アスタリスク)
+ (プラス)
正規表現を記述する場合に、特別な意味を表す文字が幾つかあります。これらの文字はより豊かな表現を実装するために必要不可欠な文字です。
\ (バックスラッシュ)
\ | 正規表現中で特別な意味を持つ文字(メタ文字)が幾つかありますが、それらの特殊文字を普通の文字として扱う場合に、その特殊文字の前に「\(バックスラッシュ)」付けます。「\(バックスラッシュ)」を付けることで正規表現の特殊文字を普通の文字として扱います。 |
「. (ドット)」や「+ (プラス)」は正規表現内では特殊な意味を持つ文字となります。このような文字を通常の文字として扱う場合は、その文字の前に「\ (バックスラッシュ)」記号を配置します。
正規表現内で特殊文字をそのまま使用した場合。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/1.2 + 1.2/', '1.2 + 1.2 = 2.4')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
正規表現内で特殊文字の前に「\」記号を配置した場合。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/1\.2 \+ 1\.2/', '1.2 + 1.2 = 2.4')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
^ (キャレット)
^ | 検索条件の表現を表します。 文字列の先頭から正規表現でマッチさせる場合に使用します。 「この特殊文字の次に指定された文字列で始まっていれば」条件に適合したと判断します。 |
以下の例では特殊文字「^」の次に指定されている This で始まる文字列であれば条件に適合したと判断されます。
※文字クラスの [ ] 内で使用すると否定の意になります。文字クラスの否定 「 ^ (キャレット) 」を使用
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/^This/', 'This is a pen')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/^This/', 'That is Suzuki\'s pen')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
$ (ドル)
$ | 検索条件の表現を表します。 文字列の最後の部分と正規表現でマッチさせる場合に使用します。 「この特殊文字の前に指定された文字列で終っていれば」条件に適合したと判断します。 |
以下の例では特殊文字「$」の前に指定されている a pen で終わる文字列であれば条件に適合したと判断されます。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/a pen$/', 'This is a pen')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/a pen$/', 'This is a book')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
. (ドット)
. | 検索条件の表現を表します。 文字列の任意の一字にマッチさせる場合に使用します。 \n (改行)以外の任意の文字を表します。 |
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/b.g/', 'bug')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?PHP if(preg_match('/b.g/', 'bag')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?PHP if(preg_match('/b..t/', 'boat')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/b.g/', 'dog')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
? (クエッション)
? | 検索条件の表現を表します。 この文字の前に指定された文字が1個だけ使われているか、あるいは使われていない場合「0回あるいは1回ということ」に条件に適合したと判断します。 |
以下の場合「o」は「0回」使用されているので、
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/do?g/', 'dg')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
以下の場合「o」は「1回」使用されているので、
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/do?g/', 'dog')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
以下の場合「o」は「2回」使用されているので、
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/do?g/', 'doog')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
* (アスタリスク)
* | 検索条件の表現を表します。 この文字の前に指定された文字が0個以上使われていれば、条件に適合したと判断します。 |
以下の場合「o」は「0回」使用されているので、
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/do*g/', 'dg')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
以下の場合「o」は「0回以上」使用されているので、
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/do*g/', 'dog')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/do*g/', 'doooooooooooooooooooog')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
一致
となります。
+ (プラス)
+ | 検索条件の表現を表します。 この文字の前に指定された文字が1個以上使われていれば、条件に適合したと判断します。 |
以下の場合「o」は「0回」なので、
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/do+g/', 'dg')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
以下の場合「o」は「1回以上」使用されているので、
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/do+g/', 'dooooooooooog')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
文字クラス
- 文字クラスとは文字のパターン
- 文字クラスは [ ](角括弧)で指定
- 文字クラスは自分で定義可能。また、定義済み文字クラスもある
文字クラスとは、正規表現を作成する際、対象となる文字のパターンを指定するのに利用します。対象となる文字は「[ ](角括弧)」内で指定します。文字クラスは自分で定義することが出来ます。また、定義済みの文字クラスを利用することも出来ます。
文字クラスの作成 「 [・・・] (角括弧) 」を使用
例:
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/d[aiueo]g/', 'word dzg word dog word')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/d[aiueo]g/', 'word dzg word dtg word dob word')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
不一致
となります。
正規表現は最初に 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' でマッチを行っています。
例:
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/d[^aiueo]g/', 'word deg word dog word')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/d[^aiueo]g/', 'word dzi word dtg word dob word')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
一致
となります。
正規表現は最初に 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] 半角数字を表します。
などがあります。
例:
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/[0-9]円/', 'この鉛筆に1本100円の値札が付いています。')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/[0-9]円/', 'この鉛筆に1本百円の値札が付いています。')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
不一致
となります。
正規表現は最初に 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 を指定 | |||
| ||||
[!#<>:;&~@%+$"\'\*\^\(\)\[\]\|\/\.,_-] | 指定記号 の何れか※- (ハイフン)は文字クラス内で範囲を指定する | |||
|
文字クラス内部の特殊文字
- 「 $ (ドル)」は文字クラス内部では通常の記号となります。
文字の終わりという意味はなくなります。 - 「 . (ピリオド)」は文字クラス内部では通常の記号となります。
任意の一文字という意味はなくなります。 - 「 ^ (キャレット)」開始括弧直後に配置された場合に否定を意味します。文字の先頭という意味はなくなります。
以下は、
[^\]]
「 ] 」 以外の文字すべてという意味です。
例
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/[^\]]/', ']')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
「 ] 」以外の文字であれば全て一致なのですが、唯一「 ] 」のみ不一致なので、結果は不一致となります。
以下は、
[$^.]
「 $ ^ . 」 各文字の何れかという意味です。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php if(preg_match('/[$^.]/', 'abcdefg$higklmn')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/[$^.]/', 'abcdefg^higklmn')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/[$^.]/', 'abcdefghigklmn')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
一致
不一致
となります。
最後の検索対象文字列は「 abcdefghigklmn 」であり、$ ^ . の何れもありませんので、不一致となります。
選択肢「 | (パイプ)」
- 「 | (パイプ)」で選択肢の作成
「 | (パイプ)」を使用して正規表現内で選択肢を作成できます。
例えば
'bag|hat'
これは、bag か hat どちらかの文字列がある場合という意味になります。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/11|12/', '2 3 5 7 11 13 17')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
1 2 3 4 5 6 7 | <!-- サンプルコード --> <?php if(preg_match('/9|10/', '2 3 5 7 11 13 17')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
となります。
繰り返し(量指定子)
- 繰り返し(量指定子)のパターンを作成
? 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回
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/boa?t/', 'boat')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/boa?t/', 'boaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
不一致
となります。
「 * 」0回以上
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/boa*t/', 'bot')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/boa*t/', 'boaaaaaaaaaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
一致
となります。
「 + 」 1回以上
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/boa+t/', 'boaaaaaaaaaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/boa+t/', 'bot')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
不一致
となります。
「 {n} 」n回
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/boa{3}t/', 'boaaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/boa{3}t/', 'boat')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
不一致
となります。
「{n,}」n回以上
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/boa{5,}t/', 'boaaaaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/boa{5,}t/', 'boaaaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
不一致
となります。
「{n,m}」n回以上、m回以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- サンプルコード --> <?php if(preg_match('/boa{1,3}t/', 'boat')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/boa{1,3}t/', 'boaaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/boa{1,3}t/', 'boaaaat')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
一致
不一致
となります。
サブパターン(単位を作る)
- () 括弧 でサブパターンを作成
「 () 」括弧で囲むとその部分を1つの単位として扱うことができます。
例えば
'( word){2}'
「 word 」の文字列が正確に2回という意味になります。
1 2 3 4 5 6 7 8 9 10 11 12 | <!-- サンプルコード --> <?php if(preg_match('/( very){2}/', 'She is very very good at a song.')) echo "一致<br>\n"; else echo "不一致<br>\n"; if(preg_match('/( very){3}/', 'She is very very good at a song.')) echo "一致<br>\n"; else echo "不一致<br>\n"; ?> |
結果は
不一致
となります。
メタ文字(特殊文字)
- メタ文字は 正規表現(パターン文字列)中 で 繰り返し や 選択肢 などを表現することが出来る特殊文字
メタ文字(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進数
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 | <!-- サンプルコード --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <meta name="robots" content="index"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head> <title>PHP 正規表現</title> </head> <body> <h1>PHP 正規表現</h1> <h3>簡単な正規表現</h3> <?php if(preg_match('/pen/', 'This is a pen')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>簡単な正規表現</h3> <?php if(preg_match('/pen/', 'This is a book')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>簡単な正規表現</h3> <?php if(preg_match('/ghi/', 'abcde fghij klmno')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>簡単の動き BOB</h3> <?php if(preg_match('/BOB/', 'This pen is given from a BOB last year. I am very much pleased with this pen.')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「$(ドル)」を使用して正規表現を作成</h3> <?php if(preg_match('/TRYPHP$/', 'This site is TRYPHP')) echo 'true'; else echo 'false'; ?> <br><br> <h3>preg_match()で簡単な文字列をマッチさせる</h3> <?php if(preg_match('/pen/', 'This is a pen')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>preg_match()で簡単な文字列をマッチさせる</h3> <?php if(preg_match('/pen/', 'This is a book')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「\(バックスラッシュ)」を使用して正規表現の特殊文字を普通の文字として扱う</h3> <?php if(preg_match('/1.2 + 1.2/', '1.2 + 1.2 = 2.4')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「\(バックスラッシュ)」を使用して正規表現の特殊文字を普通の文字として扱う</h3> <?php if(preg_match('/1\.2 \+ 1\.2/', '1.2 + 1.2 = 2.4')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「\(バックスラッシュ)」を使用して正規表現の特殊文字を普通の文字として扱う</h3> <?php if(preg_match('/\\\\/', '\\')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「^」を使用して正規表現を作成</h3> <?php if(preg_match('/^This/', 'This is a pen')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「^」を使用して正規表現を作成</h3> <?php if(preg_match('/^This/', 'That is Suzuki\'s pen')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「$」を使用して正規表現を作成</h3> <?php if(preg_match('/pen$/', 'This is a pen')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「$」を使用して正規表現を作成</h3> <?php if(preg_match('/pen$/', 'This is a book')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「.」を使用して正規表現を作成</h3> <?php if(preg_match('/b.g/', 'bug')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「.」を使用して正規表現を作成</h3> <?php if(preg_match('/b.g/', 'bag')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「.」を使用して正規表現を作成</h3> <?php if(preg_match('/b.g/', 'dog')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「?」を使用して正規表現を作成</h3> <?php if(preg_match('/do?g/', 'dg')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「?」を使用して正規表現を作成</h3> <?php if(preg_match('/do?g/', 'dog')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「?」を使用して正規表現を作成</h3> <?php if(preg_match('/do?g/', 'doog')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「*」を使用して正規表現を作成</h3> <?php if(preg_match('/do*g/', 'dg')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「*」を使用して正規表現を作成</h3> <?php if(preg_match('/do*g/', 'dog')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「*」を使用して正規表現を作成</h3> <?php if(preg_match('/do*g/', 'doooooooooooooooooooog')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「+」を使用して正規表現を作成</h3> <?php if(preg_match('/do+g/', 'dg')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>「+」を使用して正規表現を作成</h3> <?php if(preg_match('/do+g/', 'doooooooooooooooooooog')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>文字クラスを使用して正規表現を作成</h3> <?php if(preg_match('/d[aiueo]g/', 'word dzg word dog word')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>文字クラスを使用して正規表現を作成</h3> <?php if(preg_match('/d[aiueo]g/', 'word dzg word dtg word dob word')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>文字クラス否定を使用して正規表現を作成</h3> <?php if(preg_match('/d[^aiueo]g/', 'word deg word dog word')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>文字クラス否定を使用して正規表現を作成</h3> <?php if(preg_match('/d[^aiueo]g/', 'word dzi word dtg word dob word')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>文字クラス範囲-を使用して正規表現を作成</h3> <?php if(preg_match('/[0-9]円/', 'この鉛筆には1本100円の値札が付いています。')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>文字クラス範囲-を使用して正規表現を作成</h3> <?php if(preg_match('/[0-9]円/', 'この鉛筆には1本百円の値札が付いています。')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>文字クラス特殊文字の取り扱い</h3> <?php if(preg_match('/[$^.]/', 'The price of this Penn is 1$ per.')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現で選択肢を作成</h3> <?php if(preg_match('/11|12/', '2 3 5 7 11 13 17')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現で選択肢を作成</h3> <?php if(preg_match('/9|10/', '2 3 5 7 11 13 17')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 繰り返し(量指定子) 「?」</h3> <?php if(preg_match('/boa?t/', 'boat')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 繰り返し(量指定子) 「*」</h3> <?php if(preg_match('/boa*t/', 'bot')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 繰り返し(量指定子) 「*」</h3> <?php if(preg_match('/boa*t/', 'boaaaaaaaaaat')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 繰り返し(量指定子) 「+」</h3> <?php if(preg_match('/boa+t/', 'boaaaaaaaaaat')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 繰り返し(量指定子) 「{n}」</h3> <?php if(preg_match('/boa{3}t/', 'boaaat')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 繰り返し(量指定子) 「{n,}」</h3> <?php if(preg_match('/boa{5,}t/', 'boaaaaaat')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 繰り返し(量指定子) 「{n,m}」</h3> <?php if(preg_match('/boa{1,3}t/', 'boaaat')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> <h3>正規表現 サブパターン(単位)</h3> <?php if(preg_match('/( very){2}/', 'She is very very good at a song.')) echo 'TRUE'; else echo 'FALSE'; ?> <br><br> </body> </html> |
タグ(=記事関連ワード)
日付
最終更新日:2024年11月14日