PHP :: 正規表現 / 「前後読み(先読み と 戻り読み)」を利用した例

前後読み正規表現
先読み(?=…)
戻り読み(?<=…)

連続する数値に カンマ を適用して可読性をあげる

$str1 = 'この商品の価格は \123です。';
$str2 = 'この商品の価格は \12345678です。';
$str3 = 'この商品の長さは 12345678.123mm です。';

正規表現

<?php
 
// $str1 を適用
echo preg_replace('/(?<=\d)(?=(\d\d\d)+[^0-9.])/', ',', $str1);
この商品の価格は \123です。
 
// $str2 を適用
echo preg_replace('/(?<=\d)(?=(\d\d\d)+[^0-9.])/', ',', $str2);
この商品の価格は \12,345,678です。
 
// $str3 を適用
echo preg_replace('/(?<=\d)(?=(\d\d\d)+[^0-9.])/', ',', $str3);
この商品の長さは 12345678.123mm です。
 
?>


正規表現の解説

'/(?<=\d)(?=(\d\d\d)+[^0-9.])/', ','
   ^^^^^  ^^^^^^^^^  ^^^^^^^      ^
   ①     ②         ③           ④

① 戻り読み  :②の条件の直前に必ず1つの数値がマッチする
② 先読み   :3桁の数字の連続が1組以上ある場合にマッチする
③ 文字の否定 :②の条件の直後で、かつ、数値とリテラルの.(ドット)以外にマッチする
④ 挿入する文字:マッチした ``位置'' にカンマを挿入する