ITのえんぴつ

Google Blockly開発者ツールやIT・プログラミングを研究して発信するブログ

PHP練習問題1:文字列から末尾の数値を抽出する

PHPの練習問題を使用して、与えられた文字列から末尾にある数値を抽出するサンプルコードを紹介します。

課題

与えられた文字列から、末尾にある数値以外の文字を検索し、それ以前の数値を抽出するコードを作成してください。また、全角数字も半角に変換して取り出してください。

< 入力例 >

AB1234
CDEF1
ABCE55
あ1234
1あああ293

< 出力例 >

1234
1
55
1234
293

答え

それでは、コードを確認してみましょう。

// 入力例
$inputs = [
    'AB1234',
    'CDEF1',
    'ABCE55',
    'あ1234',
    '1あああ293'
];

// 出力例
foreach ($inputs as $input) {
    echo extractNumbers($input) . PHP_EOL;
}

/**
 * 文字列から末尾の数値を抽出する関数
 *
 * @param string $input 抽出対象の文字列
 * @return string 抽出された数値
 */
function extractNumbers($input) {
    // 全角数字を半角に変換する
    $input = mb_convert_kana($input, 'n', 'UTF-8');

    // 文字列の末尾からループし、数値以外が見つかるまで抽出
    $numbers = '';
    $foundNumeric = false;
    $length = mb_strlen($input);

    for ($i = $length - 1; $i >= 0; $i--) {
        $char = mb_substr($input, $i, 1);
        if (is_numeric($char)) {
            $numbers = $char . $numbers;
            $foundNumeric = true;
        } elseif ($foundNumeric) {
            // 数値以外が見つかり、すでに数字が見つかっている場合は抽出終了
            break;
        }
    }

    return $numbers;
}

このコードは与えられた文字列から数値を末尾から検索し、それ以前の数値を抽出します。全角数字も半角に変換して処理します。入力例の文字列に対して、出力例のように数値が抽出されます。