PHPでは、 preg_replace_callback_array()は非常に強力な関数であり、正規表現に基づいて文字列を置き換えることができ、コールバック関数を使用して置換ロジックを処理できます。 preg_replace_callback_array()を使用すると、複数の正規表現と対応するコールバック関数を渡すことにより、複雑な交換要件を柔軟に処理できます。ただし、場合によっては、コールバック関数で外部変数を使用する必要があります。これを達成するために、閉鎖を組み合わせて達成できます。
この記事では、閉鎖(匿名関数)を使用してpreg_replace_callback_array()に置き換えるときに外部変数を使用する方法について説明します。
閉鎖は、定義されたときに外部変数にアクセスして使用できるPHPの匿名関数です。閉鎖は、外部変数をキャプチャし、関数のコンテキストとして使用できます。通常の関数とは異なり、閉鎖は名前を定義するときに名前を指定する必要はなく、通常は関数オブジェクトのクラスとして渡され、呼び出されます。
$variable = '外部変数';
$closure = function () use ($variable) {
return '使用済み ' . $variable;
};
echo $closure(); // 出力 '使用済み 外部変数'
上記の例では、 $変数は外部変数であり、閉鎖は使用キーワードを使用してキャプチャし、閉鎖本体内でアクセス可能です。
preg_replace_callback_array()関数は連想配列を受け入れ、配列のキーは正規表現であり、値は対応するコールバック関数です。クロージャーをコールバック関数として渡し、クロージャー内の外部変数を使用できます。
$pattern1 = '/\bfoo\b/';
$pattern2 = '/\bbar\b/';
$variable = 'コンテンツを交換します';
$patterns = [
$pattern1 => function ($matches) use ($variable) {
return $variable . ' - ' . $matches[0];
},
$pattern2 => function ($matches) use ($variable) {
return strtoupper($variable) . ' - ' . $matches[0];
}
];
$subject = 'foo bar';
$result = preg_replace_callback_array($patterns, $subject);
echo $result; // 出力 'コンテンツを交換します - foo コンテンツを交換します - bar'
$ patternsアレイには、2つの正規式と、対応するコールバック関数が含まれています。
各コールバック関数は、外部変数$変数が使用キーワードによってキャプチャされる閉鎖です。
正規表現は、弦のfooとbarと一致し、閉鎖は一致するコンテンツを処理します。
URLを含む文字列があるとして、 preg_replace_callback_array()に置き換えて、外部URLドメインを使用する必要があります。
$pattern1 = '/https?:\/\/(www\.)?example\.com/';
$pattern2 = '/https?:\/\/(www\.)?another-example\.com/';
$domain = 'm66.net'; // 外部ドメイン名を使用します
$patterns = [
$pattern1 => function ($matches) use ($domain) {
return 'https://' . $domain . str_replace('example.com', '', $matches[0]);
},
$pattern2 => function ($matches) use ($domain) {
return 'https://' . $domain . str_replace('another-example.com', '', $matches[0]);
}
];
$subject = 'アクセス https://www.example.com または https://another-example.com 詳細情報を入手してください。';
$result = preg_replace_callback_array($patterns, $subject);
echo $result; // 出力 'アクセス https://m66.net 詳細情報を入手してください。'
それぞれexample.comとAnother-example.comに一致する2つの正規表現を定義します。
外部変数$ドメイン( M66.NETの値)を使用して、URLのドメイン名を置き換えます。
preg_replace_callback_array()を使用すると、文字列のURLを柔軟に処理し、新しいドメイン名に置き換えることができます。
閉鎖とpreg_replace_callback_array()関数を組み合わせて、文字列置換で非常に便利に外部変数を使用できます。閉鎖により、PHPを使用すると、外部変数をコールバック関数に渡し、これらの変数を交換ロジックで柔軟に使用できます。このテクノロジーは、URL置換、複雑な文字列処理など、交換コンテンツを動的に変更する必要があるシナリオに特に適しています。
この記事が、閉鎖と組み合わせてpreg_replace_callback_array()で外部変数置換ロジックを使用する方法をよりよく理解するのに役立つことを願っています。ご質問がある場合は、メッセージを残して議論してください!