matchとpreg_replace()
使う時の注意点
正規表現は同じものが使えるが、
jsの方ではシンタックスエラーでもphpでは動くこともある。
・繰り返し表現
* : 0回以上の繰り返し
+: 1回以上の繰り返し
?: 0回または1回の出現
{5}: 5回の繰り返し
{3,4}: 3回から4回の繰り返し
{2,}: 2回以上の繰り返し
ex) /d{3}-d{4}/g
このようにすると郵便番号のような文字列を検索できる
・半角スペース
スペースは普通に書いてもマッチする。
ex) / +/ : 1回以上の半角スペース
ex) / +/ : 1回以上の全角スペース
ex) /\s+/ : 1回以上の空白文字(全角半角スペース、タブ、改行、改ページ)
ex) /\S+/ : 1回以上の空白文字を含まない文字列
・行頭行末指定
ex) /^abcd$/ : abcdの完全一致
^と$で囲めばいいのだが、改行コードなどが入っているとそれを含めず一致となってしまうので、Aとzで囲むほうが安全ではある。
ex)/Aabcd\z/ : abcd以外の文字が入っていれば一致しない
phpのpreg_matchではヒットしたところが繰り返しになってしまうので完全一致で文字を見つけたい時は必要である。
preg_replace
マッチした文字列を、指定した文字列で置き換えるphpの関数
これは、一度に複数の文字列を変数を使って置き換えることも可能なので便利である。
str_replaceでは複数置き換えは、配列を使えば可能だが、検索文字列が長い文章の中にある場合は、大変である。
str_replaceでは、一致した部分だけが置き換わるので、全て置き換えたい場合は、preg_replaceを使う。
$subject = 'def文字列abc'; // 検索対象
$search = '/(.*?)文字列(.*?)/'; // 検索文字 - スラッシュで囲む
$replace = '$1文章$2'; // 置き換え文字 - $searchの正規表現でヒットした順に番号が振られる変数のようなもの
$subject = preg_replace($search,$replace,$subject);
実行後
文字列以外は、なんでもいい文字なので
ヒットした部分を置き換え、他はそのままになる
=>def文章abc
参考
https://php-archive.net/php/exact-match/
https://www-creators.com/archives/2880
http://okumocchi.jp/php/re.php
PHPのstr_replaceとpreg_replace(正規表現)の使い方