PHPで文字列から指定された桁数の数字を取り出す方法についてです。関数は preg_match_all()を使います。
$string = '数字 1234 今日は、5678、明日は7890です。http://example.com/3456';
$pattern = '/\d{4}/'; //正規表現で4桁の数字を抽出
preg_match_all($pattern, $string, $match);
echo '<pre>';
print_r($match);
echo '</pre>';
//出力結果
Array
(
[0] => Array
(
[0] => 1234
[1] => 5678
[2] => 7890
[3] => 3456
)
)
こちらは4桁の数字がうまく抽出されたような結果になっていますが、元の文章に123456789のような4桁以上の数字がある場合、求める結果になりません。文章に含まれる数字が4桁のみという限定された状況では利用できます。
元の文章に4桁以上の数字が含まれる場合を見てみましょう。
$string = '数字 123456789 今日は、56、明日は89456789です。http://example.com/3456/12345678/';
$pattern = '/\d{4}/'; //正規表現で4桁の数字を抽出
preg_match_all($pattern, $string, $match);
echo '<pre>';
print_r($match);
echo '</pre>';
//出力結果
Array
(
[0] => Array
(
[0] => 1234
[1] => 5678
[2] => 8945
[3] => 6789
[4] => 3456
[5] => 1234
[6] => 5678
)
)
こちらは4桁以上の数字があると4桁で区切って出力されてしまいます。「123456789」の場合「1234」「5678」のように出力されています。
$string = '数字 1234 今日は、5678、明日は8912345678です。http://example.com/3456/246813579/';
$pattern = '/(?<!\d)\d{4}(?!\d)/'; //正規表現で4桁の数字を抽出
preg_match_all($pattern, $string, $match);
echo '<pre>';
print_r($match);
echo '</pre>';
//出力結果
Array
(
[0] => Array
(
[0] => 1234
[1] => 5678
[2] => 3456
)
)
$pattern = ‘/(?<!\d)\d{4}(?!\d)/’; の部分がポイントで、
「\d{4}」の前の部分「(?<!\d)」は直前の文字が半角数字でない場合、後ろの部分「(?!\d)」は直後の文字が半角英数でない場合という意味になります。これで半角4桁の数字のみが抽出されます。