PHP 正規表現
正規表現を使用すると複雑な検索や置換ができます。検索
正規表現を使用して検索を行うには、preg_match関数を使用します。引数は以下になります。preg_match("/正規表現指定/", 対象文字列,検索結果配列)
対象文字列が含まれるかどうかを調べる場合、検索結果配列は省略できます。
<?php
$str = "aaabbbcccddd";
$str2 = " 123abc4567";
echo "正規表現は/・・・/で囲んで指定します。<br />";
if (preg_match("/^a/", $str)) {
echo "preg_match(\"/^a/\", $str)<br />";
echo "true";
}
echo "<br /><br />";
echo "/・・・/i とすると大文字小文字を無視します<br />";
if (preg_match("/D$/i", $str)) {
echo "preg_match(\"/D$/i\", $str)<br />";
echo "true";
}
echo "<br /><br />";
$ary = [];
$ary2 = [];
echo "(・・・)で囲んだ部分を抜き出すこともできます。<br />";
echo "preg_match(\"/(b+).*?(d+)/\", {$str}, \$ary)<br />";
preg_match("/(b+).*?(d+)/", $str, $ary);
echo "<pre>";
print_r($ary);
echo "</pre>";
echo "|でorの指定ができます。<br />";
echo "preg_match(\"/(abc|def).+?([^45])/\", {$str2}, \$ary)<br />";
preg_match("/(abc|def).+?([^45]+)/", $str2, $ary);
echo "<pre>";
print_r($ary);
echo "</pre>";
echo "[]でこのなかのいずれかの指定ができ、-で範囲の指定ができます。{}で繰り返し指定ができます<br />";
echo "preg_match(\"/([0-9a-z\s]{4})/\", $str2, \$ary)<br />";
preg_match("/([0-9a-z]{4})/", $str2, $ary);
echo "<pre>";
print_r($ary);
echo "</pre>";
?>
実行イメージ 
正規表現 | 説明 |
---|---|
/・・・/i | 大文字小文字を無視 |
^ | 先頭 |
$ | 末尾 |
+ | 前の文字を1文字以上繰り返し |
* | 前の文字を0文字以上繰り返し |
. | なにか1文字 |
? | なにか1文字または文字なし |
{数} | 前の文字を数文字繰り返し |
{From数,To数} | From数~To数文字繰り返し |
(・・・) | カッコの部分を抜き出し |
[・・・] | ブラケットの中のいずれか |
[^・・・] | ブラケットの中のいずれか以外 |
\s | スペース |
\S | スペース以外 |
\w | 文字[0-9a-Z_] |
\W | 文字以外[^0-9a-Z_] |
\d | 数字[0-9] |
\D | 数字以外[^0-9] |
置換
正規表現を使用して置換を行うには、preg_replace関数を使用します。引数は以下になります。preg_replace("/正規表現指定/", 置換文字列, 対象文字列)
正規表現の指定は検索時と同じように使えます。(・・・)で指定した部分は$1、$2、$3、・・・を指定することで置換文字列に含めることができます。
<?php
$str = " 123abc4567";
echo "preg_replace関数で置換します。";
echo "<br /><br />";
echo "preg_replace(\"/\D+/\", \"-\", $str)<br />";
echo preg_replace("/\D+/", "-", $str);
echo "<br /><br />";
echo "preg_replace(\"/([23]+).*?(\d+)/\", \"$2+$1\", $str)<br />";
echo preg_replace("/([23]+).*?(\d+)/", "$2+$1", $str);
?>
実行イメージ 
ページのトップへ戻る