PHPでは、 preg_replace_callback_arrayとarray_mapは、複雑なテキスト操作を処理するために組み合わせて使用できる2つの非常に強力なツールです。 preg_replace_callback_arrayを使用すると、パターンセットに基づいて交換操作を実行でき、各マッチングパーツでコールバック関数を実行できます。 array_mapは、配列の各要素にコールバック関数を適用できます。
この記事では、例を使用して、これら2つの機能を組み合わせて使用して複雑なテキスト処理を実現する方法を示します。
複数のURLとテキストを含む文字列があるとしたら、ドメイン名をM66.NETに置き換えるなど、これらのURLでいくつかの処理を行い、文字列のいくつかの特別なタグ( [URL]など)のカスタム交換などを行う必要があります。これは、クローラーやテキストクリーニングシナリオなど、一般的な要件です。
まず、2つの主要な機能を定義する必要があります。
文字列の特定のパターンをpreg_replace_callback_arrayに置き換えます。
array_mapを使用して、交換された結果のさらに処理または変換を実行します。
特定の実装を見てみましょう。
<?php
// 1. 交換する必要があるコールバック関数を定義します
$callback_array = [
// マッチ URL ドメイン名を置き換えます
'/https?:\/\/([\w\-]+\.[\w\-]+)/' => function($matches) {
return 'https://' . 'm66.net';
},
// マッチ [url] タグとプロセス
'/\[url\](.*?)\[\/url\]/' => function($matches) {
return '<a href="' . $matches[1] . '">' . $matches[1] . '</a>';
}
];
// 2. 元のテキスト
$text = "これはテスト文字列です,いくつかを含めます URL: https://example.com そして別のリンク:[url]https://example2.com[/url]。";
// 3. 使用 preg_replace_callback_array 交換します
$processed_text = preg_replace_callback_array($callback_array, $text);
// 4. 使用 array_map 処理配列(この例は、単にテキストを大文字に変換します)
$processed_text_array = array_map('strtoupper', explode(' ', $processed_text));
// 5. 処理されたテキストを文字列にマージします
$final_text = implode(' ', $processed_text_array);
// 最終結果を出力します
echo $final_text;
?>
preg_replace_callback_array :この関数は、関連するアレイを最初のパラメーターとして受け入れ、各配列のキーは正規表現であり、値はコールバック関数です。このコールバック関数は、一致するテキストで処理を実行します。
この例では、2つのパターンがあります。
URLの交換: https://またはhttp://で始まるURLを正規表現を介して一致させ、そのドメイン名をm66.netに置き換えます。
URLタグの交換: [URL]と[/url]タグの間のURLを一致させ、HTMLハイパーリンク形式に変換します。
array_map :この関数は、指定されたコールバック関数を配列の各要素に適用します。ここでは、エクスプロイトとArray_mapを使用して、各単語を大文字に変換することによって、処理されたテキストを単語に分割するだけです。最後に、それらを内蔵して文字列に戻します。
入力テキストは次のとおりです。
これはテスト文字列です,いくつかを含めます URL: https://example.com そして別のリンク:[url]https://example2.com[/url]。
preg_replace_callback_arrayおよびarray_mapで処理した後、出力の結果は次のとおりです。
これはです 1つ テスト 弦,含む いくつかの URL: https://m66.net そして 另1つ リンク:<a href="https://example2.com">https://example2.com</a>。
preg_replace_callback_arrayとarray_mapを使用して、特にURLまたはタグ形式を扱う場合、非常に複雑なテキスト処理を実装できます。この方法は効果的であるだけでなく、柔軟性もあり、要件に応じて異なる処理ロジックを拡張できます。このアプローチは、多くのテキストを処理する必要がある場合にうまく機能します。
うまくいけば、この簡単な例を通して、これらの2つの機能がどのように使用されているかをよりよく理解し、実際の開発に適用できることを願っています。