PHP 正規表現関数
1. PHP 正規表現関数の概要
PHP には、正規表現(Regular Expressions)を利用するための強力な組み込み関数が多数用意されています。
以下は、実務で頻繁に使用される代表的な Regexp 関数です:
preg_match(): 文字列の中にパターンが存在すれば 1 を、存在しなければ 0 を返します。preg_match_all(): 文字列の中でパターンがマッチした合計回数を返します。preg_replace(): マッチしたパターンを別の文字列に置換し、新しい文字列を返します。preg_split(): 正規表現をデリミタとして使用し、文字列を分割して 配列(Array) を生成します。preg_grep(): 入力された配列の中から、指定したパターンにマッチする要素のみを含む配列を返します。
2. PHP preg_match() 関数
preg_match() 関数は、パターンが文字列内で見つかった場合に 1 を返し、見つからない場合は 0 を返します。
コード例:
文字列 "Visit Volardev" 内で "volardev" を大文字・小文字を区別せずに検索します。
<?php
$str = "Volardevを訪問する";
$pattern = "/volardev/i"; // 'i' モディファイアで大文字小文字を区別しない
echo preg_match($pattern, $str); // 出力: 1
?>3. PHP preg_match_all() 関数
preg_match_all() 関数は、文字列内でパターンに一致したすべての個数を返します。
コード例:
文字列内にある "ain" という文字列の出現回数を、大文字・小文字を区別せずにカウントします。
<?php
$str = "The rain in SPAIN falls mainly on the plains.";
$pattern = "/ain/i";
echo preg_match_all($pattern, $str); // 出力: 4
?>4. PHP preg_replace() 関数
preg_replace() 関数は、文字列内でパターンにマッチしたすべての箇所を、別の文字列に置換します。
コード例:
大文字・小文字を区別しない正規表現を使用して、文字列内の "Microsoft" を "Volardev" に置換します。
<?php
$str = "Microsoftへようこそ!";
$pattern = "/microsoft/i";
echo preg_replace($pattern, "Volardev", $str); // 出力: Volardevへようこそ!
?>5. PHP preg_split() 関数
preg_split() 関数は、正規表現のマッチングをセパレータ(区切り文字)として使用し、文字列を分割して配列を作成します。
コード例:
空白文字やコロンを基準に文字列を分割します。
<?php
$str = "This is a text";
$pattern = "/[\s:]/"; // 空白文字 (\s) または コロン (:) をターゲットにする
$components = preg_split($pattern, $str);
print_r($components);
/* 出力:
Array (
[0] => This
[1] => is
[2] => a
[3] => text
)
*/
?>6. PHP preg_grep() 関数
preg_grep() 関数は、入力された配列の中から、指定したパターンにマッチする要素のみを抽出して返します。
コード例:
配列の中から "p" で始まる要素を取得します。
<?php
$input = ["Red", "Pink", "Green", "Blue", "Purple"];
// "p" で始まる要素を検索(大文字小文字を区別しない)
$result = preg_grep("/^p/i", $input);
print_r($result);
/*
出力:
Array (
[1] => Pink
[4] => Purple
)
*/
?>6.1 PREG_GREP_INVERT による結果の反転
preg_grep() 関数には第3引数として PREG_GREP_INVERT を指定できます。これを使用すると結果が反転し、パターンにマッチ「しない」要素のみを返します。
コード例:
配列の中から "p" で始まらない要素を取得します。
<?php
$input = ["Red", "Pink", "Green", "Blue", "Purple"];
$result = preg_grep("/^p/i", $input, PREG_GREP_INVERT);
print_r($result);
/*
出力:
Array (
[0] => Red
[2] => Green
[3] => Blue
)
*/
?>7. グルーピング(Grouping)
括弧 ( ) を使用することで、パターン全体に 量化子(Quantifiers) を適用したり、マッチした特定の部分を抽出したりすることができます。
コード例:
"ba" の後に "na" が2回続く "banana" という単語を検索します。
<?php
$str = "Apples and bananas.";
// "ba" の後に "na" が 2 回繰り返されるパターンを検索
$pattern = "/ba(na){2}/i";
echo preg_match($pattern, $str); // 出力: 1
?>