PHPでは、 preg_replace_callbackは非常に実用的な通常の交換機能であり、コールバック関数を使用して、通常の表現マッチングに基づいて一致結果を処理できます。多くの場合、複雑な交換要件に使用されます。特に、コンテンツを一致させるには動的な変更が必要な場合。この関数を正しく使用するには、コールバック関数のパラメーターを理解することが重要です。この記事では、preg_replace_callbackコールバック関数の各パラメーターの役割を1つずつ解析します。
preg_replace_callback関数を使用して、コールバック関数を実行して、正規式に一致する部分を置き換えます。その基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$callback</span></span><span>, </span><span><span class="hljs-variable">$subject</span></span><span>);
</span></span>
$パターン:正規表現パターン。
$ callback :マッチング結果を処理するために使用されるコールバック関数。
$件名:一致して交換する文字列。
コールバック関数は、 preg_replace_callbackのコアです。通常、一致するコンテンツに特別な処理が必要な場合、コールバック関数を介してすべてのマッチを操作します。コールバック関数の定義は、匿名関数または名前付き関数にすることができます。どちらの形式でも、コールバック関数は特定の数のパラメーターを受け入れます。
コールバック関数の最初のパラメーターは、正規表現と一致するすべての結果を含む配列です。そのコンテンツには以下が含まれます:
最初の要素( $ mates [0] )は、一致する文字列全体です。
後続の要素( $ mates [1] 、 $ mates [2] 、...)は、各キャプチャグループのマッチング結果(つまり、正規表現の括弧の部分)です。
たとえば、次の正規表現があるとします。
<span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/(\d+)\-(\d+)/'</span></span><span>;
</span><span><span class="hljs-variable">$subject</span></span><span> = </span><span><span class="hljs-string">'12-34, 56-78'</span></span><span>;
</span></span>
次に、 preg_replace_callbackを使用して処理します。
<span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, function(</span><span><span class="hljs-variable">$matches</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$matches</span></span><span>);
}, </span><span><span class="hljs-variable">$subject</span></span><span>);
</span></span>
実行結果は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => </span><span><span class="hljs-number">12</span></span><span>-</span><span><span class="hljs-number">34</span></span><span>
[</span><span><span class="hljs-number">1</span></span><span>] => </span><span><span class="hljs-number">12</span></span><span>
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-number">34</span></span><span>
)
</span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => </span><span><span class="hljs-number">56</span></span><span>-</span><span><span class="hljs-number">78</span></span><span>
[</span><span><span class="hljs-number">1</span></span><span>] => </span><span><span class="hljs-number">56</span></span><span>
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-number">78</span></span><span>
)
</span></span>
$ matches [0]は一致する完全な文字列です。
$ MATTES [1]と$ MATTES [2]は、一致するサブパターンパーツです。
コールバック関数の返品値は、交換の結果として使用されます。これは、コールバック関数が単なるデータ処理機能ではなく、その返品値が交換のコンテンツに直接影響することを意味します。コールバック関数が文字列を返す場合、文字列は元々一致した部分を置き換えます。
例えば:
<span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/(\d+)\-(\d+)/'</span></span><span>;
</span><span><span class="hljs-variable">$subject</span></span><span> = </span><span><span class="hljs-string">'12-34, 56-78'</span></span><span>;
</span><span><span class="hljs-variable">$replaced</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, function(</span><span><span class="hljs-variable">$matches</span></span><span>) {
</span><span><span class="hljs-comment">// 2つの数値の合計を交換用に使用します</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>] + </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>];
}, </span><span><span class="hljs-variable">$subject</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$replaced</span></span><span>;
</span></span>
出力の結果は次のとおりです。
<span><span>46, 134
</span></span>
この例では、一致した数値を追加し、元の一致する文字列を結果に置き換えます。
コールバック関数自体は、$ offsetおよび$ limitパラメーターを通じてより詳細な情報を取得することもできます。これらのパラメーターは通常、 preg_replace_callbackによって内部的に処理されますが、 preg_replace_callback_arrayを介してこれらのパラメーターをより柔軟に制御できます。通常、一般的に使用すると、コールバック関数の最初のパラメーター( $一致)と戻り値で十分です。
preg_replace_callback関数とそのコールバック関数は、優れた柔軟性を提供し、開発者が一致するコンテンツに基づいて動的に置き換えることができます。コールバック関数の最初のパラメーター$マッチは、完全な一致やキャプチャされたグループ情報を含む一致に関する詳細情報を提供し、コールバック関数の返品値は置き換えられたコンテンツを直接決定します。これらの基本概念を習得した後、 preg_replace_callbackを使用して、複雑な定期的な交換操作を実装できます。