preg_replace_callback_arrayを使用して複雑なテキスト置換を処理する場合、通常のコールバック関数で一致をデバッグし、ロジックが正しいかどうかを判断する必要があることがよくあります。 PHPは、2つの非常に実用的なデバッグ関数を提供します: var_dump()とprint_r() 。この記事では、 PREG_REPLACE_CALLBACK_ARRAYのこれら2つの関数の助けを借りて、通常のコールバックロジックをデバッグする方法の例を介して示します。
preg_replace_callback_array()は、php 7.0以上で提供される関数です。これにより、正規表現とコールバック関数で構成される連想配列を渡すことができます。一致するテキストを通過し、対応するコールバック関数に従って置き換えます。
preg_replace_callback_array(array $patterns_and_callbacks, string $subject, int $limit = -1, int &$count = null): string
preg_replace_callbackと比較して、複数の正規表現と複数のコールバック関数を処理でき、より明確なロジックとより強力なスケーラビリティを備えています。
マークダウンスタイルのリンクとカスタム{{{code}}タグを組み合わせたテキストがあり、 preg_replace_callback_arrayを使用して均一に処理するとします。
$text = 'クリック [ここ](https://m66.net) 詳細を確認してください,または使用します {{print_name}} 変数。';
2つのパターンを定義し、それぞれのコールバック関数を指定します。
$patterns = [
// マッチ markdown リンク:[文章](URL)
'/\[(.*?)\]\((.*?)\)/' => function ($matches) {
echo "マッチ到 markdown リンク:\n";
print_r($matches);
return '<a href="' . htmlspecialchars($matches[2]) . '">' . htmlspecialchars($matches[1]) . '</a>';
},
// マッチ {{変数}} 形状
'/\{\{(.*?)\}\}/' => function ($matches) {
echo "マッチ到変数标签:\n";
var_dump($matches);
$variableName = $matches[1];
// 模拟変数替换
$variables = [
'print_name' => 'ユーザー名'
];
return isset($variables[$variableName]) ? $variables[$variableName] : '';
}
];
$result = preg_replace_callback_array($patterns, $text);
echo "\n最終的な交換結果:\n" . $result;
マッチ到 markdown リンク:
Array
(
[0] => [ここ](https://m66.net)
[1] => ここ
[2] => https://m66.net
)
マッチ到変数标签:
array(2) {
[0]=>
string(17) "{{print_name}}"
[1]=>
string(10) "print_name"
}
最終的な交換結果:
クリック <a href="https://m66.net">ここ</a> 詳細を確認してください,または使用します ユーザー名 変数。
print_r()を使用して、明確な構造を持つ出力配列を使用します。これは、人間の読みに適しています。
var_dump()を使用してデータ型と長さを表示することは、複数のデータ構造を扱う場合に特に役立ちます。
Webページの出力を汚染する情報のデバッグを避けるために、CLIまたはログファイルでデバッグすることをお勧めします。
オンラインになる前にすべてのデバッグステートメントを削除またはコメントして、出力がきれいであることを確認してください。
preg_replace_callback_arrayは、強力なマルチモードの通常の交換機能を提供します。デバッグ段階では、 var_dump()およびprint_r()と組み合わせることで、一致する状況を迅速に理解し、ロジックが正しいかどうかを確認するのに役立ちます。このデバッグ方法を習得すると、複雑なテキスト処理タスクの処理における効率を大幅に向上させることができます。