̃Gg[͂ĂȃubN}[Nɒlj

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



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

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

  • 数字の連続に対して、3桁ごとに カンマ を適用する。
  • 連続する数値は4桁以上に限る。
  • ただし、小数点を含む数値には適用しない
$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組以上ある場合にマッチする
③ 文字の否定 :②の条件の直後で、かつ、数値とリテラルの.(ドット)以外にマッチする
④ 挿入する文字:マッチした ``位置'' にカンマを挿入する




programming/php/regex/track.txt