正規表現

日々雑感

とある住所リストをソートする際、「A町1-11-1」といった住所を内部的に
「A町01-11-01」としたいと思って、「数字1桁だけの箇所は頭に0をつける」という処理を正規表現でやろうとしたのですが…思いの外ハマりました。

「/\d{1}/」と量指定子をつけてみても、「A町01-0101-01」になってしまう 。
あれこれ悩んだ末、この方の記事に助けられました。

【メモ】正規表現でn桁以内の数字列のみ検索する
なるほど、「直前が半角数字でない」「直後が半角数字でない」とは言われてみればその通り。
最終的に、このような形でできました。

$address = preg_replace(‘/(?<!\d)(\d{1})(?!\d)/’, ‘0$1’, $address);

ありがとうございました!