logo

PHP preg_match() 関数

preg_match() 関数は、正規表現の一致を実行する PHP の組み込み関数です。この関数は文字列でパターンを検索し、パターンが存在する場合は true を返し、存在しない場合は false を返します。

通常、検索は $subject 文字列パラメータの先頭から開始されます。オプションのパラメーター $offset は、指定された位置から検索を開始するために使用されます。

構文

 int preg_match (string $pattern, string $subject, array $matches, int $flags, int $offset) 

注: $offset は、検索を開始する位置を指定するオプションのパラメータです。

パラメーター

この関数は、以下に説明する 5 つのパラメータを受け入れます。

パターン

文字列型のパラメータです。このパラメータは、検索するパターンを文字列として保持します。

主題

このパラメータは、パターンを検索する入力文字列を保持します。

マッチ

matches パラメータが指定されている場合は、検索結果が含まれます。

一致[0] - 完全なパターンと一致したテキストが保持されます。

一致[1] - 最初にキャプチャされた括弧で囲まれたサブパターンと一致したテキストなどが含まれます。

フラグ

Python OSのリストディレクトリ

フラグには、以下に示すフラグを含めることができます。

    PREG_OFFSET_CAPTURE:このフラグが preg_match() に渡されると、一致が発生するたびに、付属の文字列オフセットも返されます。PREG_UNMATCHED_AS_NULL:このフラグが preg_match() で渡された場合、一致しないサブパターンは NULL として報告され、それ以外の場合は空の文字列として報告されます。

オフセット

デフォルトでは、検索は $subject パラメータの先頭から開始されます。 offset パラメータは、検索を開始する場所を指定するために使用されます。これはオプションのパラメータです。

戻り値の型

preg_match() 関数は、パターンが一致する場合は true を返し、そうでない場合は false を返します。

注: ある文字列が別の文字列に含まれているかどうかだけを確認したい場合は、 preg_match() 関数を使用しないでください。 strpos() 関数を使用すると高速になります。

 <?php //initialize a variable of string type $site = 'javatpoint'; preg_match('/(java)(t)(point)/', $site, $matches, PREG_OFFSET_CAPTURE); //display the matches result print_r($matches); ?> 

出力:

 Array ( [0] =&gt; Array ( [0] =&gt; javatpoint [1] =&gt; 0 ) [1] =&gt; Array ( [0] =&gt; java [1] =&gt; 0 ) [2] =&gt; Array ( [0] =&gt; t [1] =&gt; 4 ) [3] =&gt; Array ( [0] =&gt; point [1] =&gt; 5 ) ) 

よりよく理解するために、上記の出力を以下のように見ることができます。

 Array ( [0] =&gt; Array ( [0] =&gt; javatpoint [1] =&gt; 0 ) [1] =&gt; Array ( [0] =&gt; java [1] =&gt; 0 ) [2] =&gt; Array ( [0] =&gt; t [1] =&gt; 4 ) [3] =&gt; Array ( [0] =&gt; point [1] =&gt; 5 ) ) 

例: 大文字と小文字を区別しない検索

 <?php //initialize a variable of string type $website = 'JTP is a best online platform to learn.'; //case insensitive search for word jtp //The 'i' after pattern delimiter indicates case-insensitive search $res = preg_match('/jtp/i', $website, $matches); if ($res) { echo 'Pattern matched in string.</br>&apos;; print_r($matches); } else { echo &apos;Pattern not matched in string.&apos;; } ?&gt; 

出力:

 Pattern matched in string. Array ( [0] =&gt; JTP ) 

例: 単語境界 () を使用する

逆参照ポインタ c
 <?php /* The  indicates the word boundary in the pattern. So, it matches only the distinct word like 'web', and words like 'coreweb' or ' webinar' do not match partially.*/ if (preg_match('/web/i', 'PHP is a web scripting language.')) { echo 'A match was found. </br>&apos;; } else { echo &apos;A match was not found. <br>&apos;; } if (preg_match(&apos;/web/i&apos;, &apos;PHP is a website scripting language.&apos;)) { echo &apos;A match was found.&apos;; } else { echo &apos;A match was not found.&apos;; } ?&gt; 

出力:

 A match was found. A match was not found. 

例: URL からドメイン名を取得する

 

出力:

 Domain name is: javatpoint.com 

Regex (正規表現) 構文

[ABC] 単一の文字 (a、b、または c) に一致します。
[^abc] a、b、または c を除く任意の 1 文字と一致します
[a-z] a ~ z の範囲内の任意の 1 文字と一致します
[a-zA-Z] a ~ z または A ~ Z の範囲内の任意の 1 文字
^ 行の始まり
$ 行末
A 文字列の先頭
文字列の終わり
任意の 1 文字
s 任意の空白文字
S 空白以外の文字
d 任意の数字
D 数字以外の任意の
任意の単語文字 (文字、数字、アンダースコア)
単語以外の文字
 単語境界チェッカー
/?/ 正規表現の開始と終了
(?) 括弧 () で囲まれたすべてをキャプチャします
(a|b) aまたはb
え? ゼロまたは 1 つ
あ* ゼロ以上の
α+ 1 つ以上の
{3} ちょうど 3 の
a{3,} 3つ以上の
{3,6} 3 から 6 の間
大文字と小文字を区別しないチェック
メートル ドットマッチ改行を作成する
バツ 正規表現内の空白を無視する

パターン「[^[a-zA-Z0-9._-] +@[a-zA-Z0-9-]+.[a-zA-Z.]{2,5}$/]」の説明

    「/?/」正規表現の開始と終了を示します。'[^[a-zA-Z0-9._-]'任意の大文字または小文字、0 ~ 9 の数字、ドット、アンダースコア、またはダッシュと一致します。'+@[a-zA-Z0-9-]'@ 記号の後に大文字または小文字、0 ~ 9 の数字、またはダッシュが続くものと一致します。'+.[a-zA-Z.]{2.5}$/'ドットはバックスラッシュを使用してエスケープされ、文字列の末尾にある長さ 2 ~ 5 の小文字または大文字と一致します。