[PHP] 文字列から指定された桁数の数字を抽出する方法 preg_match_all()

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



Author: webmaster