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桁の数字のみが抽出されます。