PHPで英数字混在の文字列から特定の数字で始まる値を抽出する方法(substr()とstrpos()の活用)
PHPでは、substr()とstrpos()を組み合わせることで、文字と数字が混在する文字列から、特定の数字で始まる値を簡単に抽出できます。本記事では、その具体的な手順をサンプルコード付きでわかりやすく解説します。
抽出対象の文字列
例として、以下のような英数字が混在する文字列を想定します。
$value = "1045632245555fghjklm67535454663443gfdjkbvc9890000006777743";
この文字列から、次のように「989」で始まる値を取り出したいとします。
9890000006777743
抽出方法:substr() と strpos() の組み合わせ
特定の値を抽出するには、まずstrpos()で対象となる文字列が始まる位置を取得し、その位置を起点にsubstr()で必要な文字数分だけ切り出します。
- strpos():文字列内で指定した文字列が最初に現れる位置(インデックス)を返します。
- substr():指定した開始位置から、指定した長さの部分文字列を返します。
サンプルコード
<!DOCTYPE html>
<html>
<body>
<?php
$value = "1045632245555fghjklm67535454663443gfdjkbvc9890000006777743";
echo "元の文字列 = ", $value, "<br>";
$result = substr($value, strpos($value, "989"), 16);
echo "抽出した値 = ", $result;
?>
</body>
</html>実行結果
元の文字列 = 1045632245555fghjklm67535454663443gfdjkbvc9890000006777743 抽出した値 = 9890000006777743
コードのポイント
処理の核となるのは次の1行です。
$result = substr($value, strpos($value, "989"), 16);
strpos($value, "989")によって、文字列「989」が始まる位置を取得し、それをsubstr()の第2引数(開始位置)に渡しています。第3引数の「16」は抽出する文字数を表しており、この例では「9890000006777743」がちょうど16文字であるため16を指定しています。
注意点
抽出したい値の文字数が異なる場合は、第3引数の長さを適宜変更してください。また、strpos()は対象の文字列が見つからない場合にfalseを返すため、実運用では見つからなかった場合のエラー処理を追加しておくと、より安全で堅牢なコードになります。
-
【PHP】文字列が指定した文字列で終わっているかどうかを判定する方法
文字列が指定された文字列(サフィックス)で終わっているかどうかを判定する関数を作成してみましょう。判定に成功した場合は TRUE を、失敗した場合は FALSE を返す仕様です。 関数の構文は次のとおりです。 endFunc(str, lastStr) 判定に使用するパラメータは以下の2つです。 str − 検査対象となる文字列 lastStr − 対象文字列の末尾で検索するテキスト 実装例 次のコードは、文字列の末尾が指定した文字列と一致しているかどうかを確認する例です。 <?php function endFunc($str, $l
-
PHPで文字列が指定した単語で始まるかどうかを判定する方法
PHPでは、文字列が特定の文字列(プレフィックス)で始まっているかどうかを確認する関数を自作することができます。この関数は、条件に一致すれば TRUE を、一致しなければ FALSE を返します。本記事では、substr() 関数と strlen() 関数を組み合わせて、文字列の先頭部分を比較するシンプルな方法を紹介します。構文関数の基本的な構文は以下のとおりです。begnWith(str, begnStr)各パラメータの意味は次のとおりです。str − 検証対象となる文字列begnStr − 対象文字列の先頭にあるかどうかを調べたいテキストサンプルコード以下は実際の使用例です。関数内部では、