PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP】preg_splitで文字と数字を別々の配列に分割する方法

PHPでは、正規表現による文字列分割に使える preg_split() 関数と、配列の先頭・末尾の要素を取り除く array_shift()array_pop() を組み合わせることで、文字列から英字と数字をそれぞれ別の配列に分離できます。

例として、次のように英字と数字が混在した文字列を考えてみましょう。

$values = "5j4o5h8n";

この文字列を「数字だけの配列」と「英字だけの配列」に分割するのが目的です。

実装例

実際のPHPコードは以下のようになります。

<!DOCTYPE html>
<html>
<body>
<?php
$values = "5j4o5h8n";

// 英字のみを抽出(数字を目安に分割)
$singleValues = preg_split("/\d+/", $values);
array_shift($singleValues); // 分割時に生じる先頭の空要素を除去
print_r($singleValues);

// 数字のみを抽出(英字を目安に分割)
$resultNumber = preg_split("/[a-z]+/", $values);
array_pop($resultNumber); // 分割時に生じる末尾の空要素を除去
print_r($resultNumber);
?>
</body>
</html>

コードのポイント

  • preg_split("/\d+/", $values): 数字の並びを区切り目として分割するため、結果には英字だけが残ります。ただし、文字列の先頭が数字で始まっているため、分割直後の配列の最初の要素は空文字になります。そこで array_shift() を使って先頭の不要な要素を削除しています。
  • preg_split("/[a-z]+/", $values): 今度は英字の並びを区切り目として分割し、数字だけを取り出します。文字列の末尾が英字で終わっているため、最後の要素が空文字になるので、array_pop() で末尾の不要な要素を削除します。

実行結果

上記のコードを実行すると、次のような出力が得られます。

Array ( [0] => j [1] => o [2] => h [3] => n ) 
Array ( [0] => 5 [1] => 4 [2] => 5 [3] => 8 )

このように、1つ目の配列には英字(j、o、h、n)が、2つ目の配列には数字(5、4、5、8)が、それぞれ順番に格納されていることが確認できます。

まとめ

preg_split() を使えば、正規表現パターンを区切り目として柔軟に文字列を分割できます。数字と英字のどちらを残したいかに応じてパターンを使い分け、array_shift()array_pop() で余分な空要素を取り除くのがポイントです。大文字も含めたい場合は、パターンを /[a-zA-Z]+/ のように変更すれば対応できます。

  1. Javaで文字列から数値を抽出する方法|replaceAll()メソッドの使い方

    java.lang.Stringクラスには、文字列を扱うための便利なメソッドが多数用意されています。これらのメソッドを活用することで、トリム(余分な空白の除去)、連結、変換、比較といったさまざまな文字列操作が可能になります。 文字列から数値だけを取り出したい場合は、StringクラスのreplaceAll()メソッドを使うのが最も手軽です。正規表現「[^0-9]」(0〜9以外のすべての文字に一致)を空文字列に置き換えることで、数字以外の文字を一括して削除できます。 サンプルコード import java.util.Scanner; public class StringExtractTest

  2. 【Python】メジャー番号とマイナー番号からrawデバイス番号を作成する方法

    os.makedev()メソッドとはPythonのos.makedev(major, minor)メソッドを使うと、メジャーデバイス番号とマイナーデバイス番号を組み合わせて、rawデバイス番号(デバイスID)を1つの数値として作成できます。このメソッドは、os.major()やos.minor()と対になる関数です。os.major()はデバイス番号からメジャー番号を抽出し、os.minor()はマイナー番号を抽出します。逆にos.makedev()は、分解された2つの番号から元のデバイス番号を再構築します。使用例以下の例では、ファイルのパスからstat情報を取得し、そこからメジャー番号とマイ