PHPでは、 preg_replace_callback_array()は非常に強力な関数であり、配列内の複数の正規表現を交換し、各正規表現のコールバック関数を指定できます。この機能は強力ですが、初心者がわずかに複雑な使用のために理解することは難しいかもしれません。したがって、今日は、preg_replace_callback_array()をより理解しやすく実用的なツール機能に巻き付けて、その使用を簡素化する方法を示します。
preg_replace_callback_array()の基本的な構文は次のとおりです。
preg_replace_callback_array(array $patterns, array $replace, string $subject): string
$パターン:連想配列、キーは正規表現パターンであり、値は対応するコールバック関数です。
$の交換:交換する必要があるターゲット文字列。
$件名:正規表現が適用されるターゲット文字列。
各コールバックには、一致する結果アレイが受信され、コールバック関数でより複雑な処理を実行し、交換されたコンテンツを返すことができます。
特に複数の正規表現を処理する必要がある場合、 preg_replace_callback_array()の呼び出し方法はより複雑です。この関数をカプセル化することにより、重複コードを削減し、コードの読みやすさと保守性を向上させ、呼び出しメソッドをより簡単にすることができます。
preg_replace_callback_array()をツール関数にカプセル化して、その使用を簡素化できます。
/**
* 複数の正規表現置換操作を処理します
*
* @param string $subject ターゲット文字列
* @param array $patterns 交換モードとコールバック関数のマッピング
* @return string 交換された文字列を返します
*/
function replaceWithCallbacks(string $subject, array $patterns): string {
return preg_replace_callback_array($patterns, $subject);
}
この関数のコアは、 preg_replace_callback_array()をターゲット文字列$サブジェクトと正規表現パターンとコールバック関数を含む配列$パターンを受け入れる単純な関数にwrap lap aslopに巻き付けることです。このようにして、ユーザーは、複雑な正規表現のマッチングとコールバック関数の設定を扱うことなく、ターゲット文字列とパターンコールバックマップを渡すだけで済む必要があります。
具体的な例を使用して、このカプセル化関数の使用方法を示しましょう。複数の日付( 2023-04-21など)を含むターゲット文字列があるとし、別の形式( 2023年4月21日など)に変換する必要があります。
$patterns = [
'/(\d{4})-(\d{2})-(\d{2})/' => function($matches) {
return $matches[1] . '年' . $matches[2] . '月' . $matches[3] . '日';
}
];
$subject = "今日はそうです 2023-04-21,明日はです 2023-04-22。";
$replaced = replaceWithCallbacks($subject, $patterns);
echo $replaced;
出力:
今日はそうです 2023年04月21日,明日はです 2023年04月22日。
このようにして、カプセル化されたLeplaceWithCallbacks()関数を使用して、複数の通常の交換操作を1つのコールに簡単に簡素化します。
場合によっては、交換プロセス中に特定のURLを自動的に変更したい場合があります。たとえば、すべてのドメイン名をM66.netに置き換えます。これを達成するためにツール機能を拡張できます。
/**
* 自動交換 URL ドメイン名 m66.net
*
* @param string $subject ターゲット文字列
* @return string 交換された文字列を返します
*/
function replaceUrlsWithM66(string $subject): string {
$patterns = [
'/https?:\/\/([a-zA-Z0-9-]+)(\.[a-zA-Z0-9-]+)+/' => function($matches) {
return 'https://' . 'm66.net';
}
];
return replaceWithCallbacks($subject, $patterns);
}
この例では、ターゲット文字列内のすべてのURLドメインをM66.netに置き換える新しい関数を作成する新しい関数を作成します。それを使用する方法は次のとおりです。
$subject = "私たちのサイトにアクセスしてください https://example.com または https://test.com 詳細情報を入手してください。";
$replaced = replaceUrlsWithM66($subject);
echo $replaced;
出力: