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

【PHP入門】preg_replaceで句読点・不要な記号を削除する方法

PHPで文字列から句読点や不要な記号を削除したい場合は、preg_replace関数と正規表現を組み合わせるのが最も一般的です。「残したい文字」以外をすべて空白に置き換えることで、句読点をまとめて取り除けます。ここでは、目的別に3つのパターンを紹介します。

1. 英字と数字だけを残す方法

英字と数字以外のすべての文字(カンマ、ピリオド、記号など)を半角スペースに置き換える例です。

<?php
$s = "Hello, my name is Bobby !? I am 8 years !";
print_r( preg_replace('/[^a-z0-9]+/i', ' ', $s));
?>

パターン「/[^a-z0-9]+/i」の意味は次のとおりです。

[^a-z0-9]:英数字以外の1文字にマッチ
+:直前のパターンが1回以上連続する部分にマッチ
i:大文字・小文字を区別しない

出力結果

Hello my name is Bobby I am 8 years

2. 英字のみを残す方法

数字も一緒に削除したい場合は、パターンから「0-9」を外すだけでOKです。

<?php
$s = "Hello, my name is Bobby !? I am 8 years !";
print_r( preg_replace('/[^a-z]+/i', ' ', $s));
?>

出力結果

Hello my name is Bobby I am years

数字の「8」が削除され、英字だけが残っているのがわかります。

3. 英字・数字・アンダースコアを残す方法

アンダースコア(_)も含めて残したい場合は、正規表現の特殊文字クラスである\W(単語文字「以外」にマッチ)を使うと便利です。

<?php
$s = "Hello, my name is Bobby !? I am 8 years !";
print_r(preg_replace('/[\W]+/', ' ', $s));
?>

出力結果

Hello my name is Bobby I am 8 years

\Wは「[^a-zA-Z0-9_]」と同等の意味を持ち、英字・数字・アンダースコア以外のすべての文字にマッチします。なお、小文字の\wは逆に単語文字そのものにマッチするため、間違えないように注意しましょう。

日本語の句読点を削除したい場合

日本語文章の「、」「。」などの句読点を削除する場合は、UTF-8モディファイア(u)を付けた正規表現を使用します。

<?php
$s = "こんにちは、PHPの世界へようこそ。楽しく学びましょう!";
print_r( preg_replace('/[、。!?]+/u', '', $s));
?>

出力結果

こんにちはPHPの世界へようこそ楽しく学びましょう

まとめ

preg_replace関数を使えば、正規表現パターンを変えるだけで「残す文字」を柔軟に制御できます。用途に応じて「英数字のみ」「英字のみ」「単語文字(英数字+アンダースコア)」など、適切なパターンを選択してください。日本語を扱う際は、忘れずに「u」モディファイアを付けるのがポイントです。

  1. 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

  2. C#でStreamReaderクラスを使ってテキストファイルを読み込む方法

    C#におけるStreamReaderクラスとは C#でテキストファイルを読み込むには、StreamReaderクラスを使用します。StreamReaderはSystem.IO名前空間に含まれるクラスで、ファイルから文字データを1行ずつ効率的に読み取るための標準的な手段として広く利用されています。 ファイルを開く まず、読み込みたいファイルのパス(ファイル名)を指定して、StreamReaderのインスタンスを作成します。 StreamReader sr = new StreamReader(hello.txt); ReadLine()メソッドで内容を取得する ReadLine()メソッド