PHPでは、正規表現の処理は日常開発の不可欠な部分です。読みやすさと柔軟性を向上させるために、PHP 7は新しい機能を導入しました - preg_replace_callback_array 。この関数は、通常のマッチングとコールバック処理の利点を組み合わせており、複雑な交換ロジックの簡潔なカプセル化です。
この記事では、 PREG_REPLACE_CALLBACK_ARRAYの基本的な使用法と実用的なアプリケーションシナリオを詳細に説明し、文字列をより効率的に処理できるようにします。
preg_replace_callback_arrayは、php 7+に追加された新しい関数です。これにより、「正規表現=>コールバック関数」のマッピング配列を定義し、これらすべての通常のルールと対応する処理ロジックを一度に適用できます。
構文は次のとおりです。
preg_replace_callback_array(array $patterns_and_callbacks, string $subject[, int $limit = -1[, int &$count = null]])
$ patterns_and_callbacks :連想配列、キーは正規表現であり、値は対応するコールバック関数です。
$件名:交換するターゲット文字列。
$制限:オプションのパラメーター、交換の最大数を指定します。
$ count :交換の総数を受信するオプションパラメーター。
2つの正規表現と対応するコールバック関数を使用して文字列を処理する方法を示す簡単な例を次に示します。
$text = '公式ウェブサイトをご覧ください:http://m66.net または、にメールを送信します support@m66.net サポートを受けてください。';
$result = preg_replace_callback_array([
// マッチURL
'/https?:\/\/[^\s]+/i' => function ($matches) {
return '<a href="' . $matches[0] . '">' . $matches[0] . '</a>';
},
// マッチEmail住所
'/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i' => function ($matches) {
return '<a href="mailto:' . $matches[0] . '">' . $matches[0] . '</a>';
}
], $text);
echo $result;
出力:
公式ウェブサイトをご覧ください:<a href="http://m66.net">http://m66.net</a> または、にメールを送信します <a href="mailto:support@m66.net">support@m66.net</a> サポートを受けてください。
従来のpreg_replace_callbackでは、複数のパターンを処理する必要がある場合は、複数の処理フローを記述する必要があります。 preg_replace_callback_arrayを使用して、すべてのロジックを中央に管理し、明確な構造とメンテナンスが容易になります。
たとえば、URL、電子メール、絵文字などを自動的にHTMLタグに変換すると、これはpreg_replace_callback_arrayの強さです。
$text = 'このリンクを参照してください:https://m66.net,にメールを送信します hello@m66.net,そして笑顔の顔 :)';
$result = preg_replace_callback_array([
'/https?:\/\/[^\s]+/' => function ($m) {
return '<a href="' . $m[0] . '">' . $m[0] . '</a>';
},
'/[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}/i' => function ($m) {
return '<a href="mailto:' . $m[0] . '">' . $m[0] . '</a>';
},
'/:\)/' => function () {
return '??';
}
], $text);
echo $result;
preg_replace_callbackへの複数のコールと比較して、 preg_replace_callback_arrayはすべてのマッチングと交換を一度に完了し、特に大きなテキストまたは複雑な代替品でパフォーマンスオーバーヘッドを削減します。
PHPバージョンは7.0以上でなければなりません。
各正規表現のコールバック関数は、交換結果を返す必要があります。そうしないと、交換が故障したり、空の文字列が故障します。
交換の順序は、配列の定義の順序に依存するため、依存関係の順序がある場合は、配列の順序に注意してください。
preg_replace_callback_arrayは非常に実用的な機能であり、特にマルチモーダルテキストの解析と交換に適しています。この関数を合理的に使用することにより、複雑な定期的な交換タスクをより簡潔で明確な方法で処理し、コードの読みやすさと保守性を向上させることができます。
開発フォーラム、豊富なテキストエディター、または単純なデータクリーニングであろうと、 preg_replace_callback_arrayは重要な役割を果たすことができます。
規則性を使用する過程でどのような困難に遭遇しますか?コミュニケーションのためのメッセージを残してください!