PHPのpreg_match_all()で文字列から不要な文字(記号)だけを抽出して表示する方法
PHPでは、preg_match_all() 関数を使うことで、文字列から不要な文字(英字やスペース以外の記号など)だけを簡単に抽出して表示できます。本記事では、具体的なサンプルコードとともにその方法を解説します。
抽出対象となる文字列の例
たとえば、次のように特殊文字を含む文字列があったとします。
$sentence = "M-y Name/i_s John+Doe";
この文字列から、英字以外の特殊文字だけを抜き出し、次のような出力を得るのが目的です。
-/_+
正規表現パターンのポイント
今回使用する正規表現は /[^a-zA-Z ]/ です。このパターンの意味は以下のとおりです。
[a-zA-Z ]… 半角英字(大文字・小文字)とスペースを表します。^… 文字クラス内の先頭にあるため否定の意味になり、「英字とスペース以外の文字」にマッチします。
つまり、このパターンにマッチするのは -、/、_、+ のような記号類ということになります。
サンプルコード
実際のPHPコードは以下のとおりです。
<!DOCTYPE html>
<html>
<body>
<?php
$sentence = "M-y Name/i_s John+Doe";
echo "元の文字列=", $sentence, "<br>";
if (preg_match_all('/[^a-zA-Z ]/', $sentence, $output)) {
echo "不要な文字は次のとおり= " . implode('', $output[0]);
}
?>
</body>
</html>コードの解説
preg_match_all()は、パターンにマッチしたすべての文字を配列に格納します。1件しか検出しないpreg_match()とは異なり、複数の不要な文字をまとめて取得できる点がポイントです。- 第3引数の
$outputにマッチ結果が代入され、$output[0]にはマッチした文字全体が配列として格納されます。 implode('', $output[0])で配列の要素を連結し、-/_+という一つの文字列にしています。
実行結果
上記のコードを実行すると、次のような出力が得られます。
元の文字列=M-y Name/i_s John+Doe 不要な文字は次のとおり= -/_+
応用:日本語や数字も除外したい場合
パターンを変更すれば、さまざまな条件での抽出が可能です。たとえば、数字も不要な文字として扱いたい場合は、次のように書きます。
preg_match_all('/[^a-zA-Z ]|[0-9]/', $sentence, $output);また、マルチバイト文字(日本語)を扱う場合は mb_ereg_match() や u 修飾子(//u)を活用すると、UTF-8の文字列でも正しく動作させられます。
まとめ
preg_match_all() と否定文字クラス [^...] を組み合わせれば、文字列から不要な文字だけを簡単に抜き出せます。入力値のバリデーションやデータクレンジングなど、実務でも役立つテクニックなので、ぜひ活用してみてください。
-
SAPとPHPを統合する方法:RFCとWebサービスによる連携の基本
SAPとPHPの連携方法 SAPシステムとPHPアプリケーションを接続する手段はいくつか存在しますが、その中でも開発者の間で特に広く利用されているのがWebサービスとRFC(Remote Function Call:リモートファンクションコール)の2つです。 SAPRFC拡張モジュールとは SAPRFCは、PHP 4およびPHP 5向けに提供されている拡張モジュールです。このモジュールを活用することで、PHPスクリプトからSAP R/3上のABAPファンクションモジュールを直接呼び出すことが可能になります。 主な活用シーン Webアプリケーションの構築: PHP言語を使用して、SAP R
-
Linuxのtrコマンド徹底解説!基本構文から実用的な使い方まで
LinuxやUnixシステムにおいて、trコマンドは文字の変換・削除・繰り返し文字の「圧縮(squeeze)」を行うためのコマンドラインユーティリティです。名前の由来は「translate(翻訳・変換)」にあります。このガイドでは、具体例を交えながらLinuxにおけるtrコマンドの使い方を詳しく解説します。繰り返し文字の除去、小文字から大文字への変換、基本的な文字の置換や削除など、さまざまな操作に活用でき、他のコマンドとパイプで組み合わせて使われることも多い便利なツールです。 Linuxは、私たちが日常的に使っている多くの技術の基盤となるカーネル/OSの中核です。スマートフォンに搭載されている