PHPの正規表現で特定の文字だけを置き換える方法|preg_replace()と先読みアサーションの活用
PHPで文字列内の特定のパターンに一致する部分だけを置き換えたい場合は、preg_replace() 関数を使用します。この関数は正規表現と組み合わせることで、柔軟かつ高度な文字列置換を実現できます。
処理の概要
たとえば、次のような入力文字列があるとします。
FirstName|John |LastName|Smith|SalaryProvided|2000|5000
ここで期待する出力は、2つの連続する4桁の数字(2000と5000)の間にある「|」だけを半角スペースに置き換えるというものです。それ以外の「|」はそのまま残します。
FirstName|John |LastName|Smith|SalaryProvided|2000 5000
ポイント:先読みアサーションの活用
この課題の鍵となるのは、正規表現の先読みアサーション(lookahead)です。パターン (\d{4})\|(?=\d{4}) の意味は以下の通りです。
(\d{4})… 4桁の数字をキャプチャグループとして取得します。\|… 直後に続く「|」に一致させます。(?=\d{4})… さらにその後ろに4桁の数字が続く場合のみ一致とみなします(実際には消費しません)。
置換後の文字列 $1 により、キャプチャした数字の後に半角スペースが挿入され、「|」が取り除かれます。これにより、数字と数字の間の区切り文字だけを選択的に置き換えることが可能になります。
サンプルコード
以下がPHPのコード例です。
<!DOCTYPE html>
<html>
<body>
<?php
$SQLDatabaseResult = "FirstName|John |LastName|Smith|SalaryProvided|2000|5000";
$output = preg_replace("/(\d{4})\|(?=\d{4})/", "$1 ", $SQLDatabaseResult);
echo "実行結果=" , "<br>";
echo $output;
?>
</body>
</html>実行結果
上記のコードを実行すると、次の出力が得られます。
実行結果= FirstName|John |LastName|Smith|SalaryProvided|2000 5000
まとめ
置き換え対象の出現回数が事前にわからない場合でも、preg_replace() は文字列内のすべての該当箇所を自動的に処理してくれます。先読みアサーションを使いこなすことで、「前後の文脈」に基づいた条件付き置換が実現でき、データベースの結果やログデータの整形など、実務のさまざまな場面で役立ちます。
-
Pythonで正規表現を使って文字列の先頭にマッチさせる方法
正規表現では、^(キャレット)というメタ文字を使うことで、文字列の先頭にマッチさせることができます。この記号は、パターンが対象となる文字列の冒頭から始まる場合にのみ一致することを意味します。例えば、次のコードは文字列「cheer leaders at the football stadium」の先頭にある単語「cheer」を抽出して表示します。コード例import re s = cheer leaders at the football stadium result = re.search(r^\w+, s) print(result.group())ここで使用しているパターン r^\w+
-
Pythonの正規表現で文字列が英数字のみかどうかを判定する方法
正規表現を使った英数字チェックの基本Pythonで文字列が英字と数字(アルファベット・半角数字)のみで構成されているかどうかを確認するには、標準ライブラリの re モジュールを使用します。具体的には、re.match(regex, string) を呼び出し、パターンとして "^[a-zA-Z0-9]+$" を指定します。この正規表現の意味は以下の通りです。^:文字列の先頭からマッチを開始[a-zA-Z0-9]:英大文字・小文字または数字のいずれか1文字+:直前のパターンが1回以上繰り返される$:文字列の末尾まで一致することを保証実行例>>> import