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);
?>
実行イメージ
ページのトップへ戻る