現在の位置: ホーム> 最新記事一覧> ドキュメント内のこの関数の最も単純で最も複雑な例の比較

ドキュメント内のこの関数の最も単純で最も複雑な例の比較

M66 2025-06-02

PHPでは、文字列処理は日常開発の非常に重要な部分です。 preg_replace_callback_array関数は、複数の正規表現パターンに準拠し、各マッチの異なるコールバック関数を呼び出すことができる文字列の部分を置き換えるための強力で柔軟なツールです。この記事では、最も単純な例と最も複雑な例を使用して、 preg_replace_callback_arrayの使用法を比較して説明します。

1。preg_replace_callback_arrayとは何ですか?

PREG_REPLACE_CALLBACK_ARRAY関数は、PHP 7.0の後に追加されました。その機能は、複数の正規表現のパターン配列に従って、対応するコールバック関数を呼び出して、それを一致させて置き換えることです。

関数プロトタイプは次のとおりです。

 string preg_replace_callback_array(array $patterns_and_callbacks, string $subject [, int $limit = -1 [, int &$count ]])
  • $ patterns_and_callbacks :配列、キーは正規表現パターンであり、値は対応するコールバック関数です。

  • $件名:交換する文字列。

  • $制限:交換の数は限られており、デフォルトは制限されません。

  • $ count :交換が発生する回数。

2。最も単純な例

<?php
$text = "メールにお問い合わせください:info@m66.net,公式ウェブサイトをご覧ください:http://m66.net";

// コールバック関数を定義します
$callbacks = [
    '/\b[\w.-]+@m66\.net\b/' => function($matches) {
        return strtoupper($matches[0]); // 大文字化するためのメール
    },
    '/http:\/\/m66\.net/' => function($matches) {
        return '<a href="' . $matches[0] . '">' . $matches[0] . '</a>'; // URLリンクに変換します
    }
];

$result = preg_replace_callback_array($callbacks, $text);
echo $result;
?>

分析:

  • 電子メールinfo@m66.netを一致させ、Capital info@m66.netに置き換えます。

  • URL http://m66.netを一致させ、HTMLタグにハイパーリンクで置き換えます。

実行後、出力は次のとおりです。

 メールにお問い合わせください:INFO@M66.NET,公式ウェブサイトをご覧ください:<a href="http://m66.net">http://m66.net</a>

この最も単純な例は、 PREG_REPLACE_CALLBACK_ARRAYが異なるコールバックを呼び出して、異なる通常のパターンに応じて完全な交換をどのように呼び出すかを示しています。

3。最も複雑な例

次の代替を完了する必要があるテキストがあるとします。

  1. 暗号化形式ですべてのM66.NETメールボックスを交換します(ユーザー名パーツはアスタリスクに置き換えられます)。

  2. 一致するすべてのHTTPまたはHTTPSリンクをターゲット= "_ blank"でハイパーリンクに変換します。

  3. すべての数値を英語の単語に変換します(いくつかの一般的な数字のみを置き換えます)。

  4. 日付形式( 2025-05-17など)を2025年5月17日よりフレンドリーな形式に置き換えます。

 <?php
$text = "郵便:user123@m66.net,Webサイト:https://m66.net,連絡先番号:400,発売日:2025-05-17。";

// ツール機能:英語の単語への数字
function numberToWords($num) {
    $map = [
        '0' => 'zero', '1' => 'one', '2' => 'two', '3' => 'three', '4' => 'four',
        '5' => 'five', '6' => 'six', '7' => 'seven', '8' => 'eight', '9' => 'nine',
        '400' => 'four hundred' // 例として
    ];
    return $map[$num] ?? $num;
}

// ツール機能:日付形式の変換
function formatDate($date) {
    $time = strtotime($date);
    return date('d M Y', $time);
}

$callbacks = [
    // 郵便加密,ユーザー名はアスタリスクに置き換えられます
    '/\b([\w.-]+)@m66\.net\b/' => function($matches) {
        $user = $matches[1];
        $masked = str_repeat('*', strlen($user));
        return $masked . '@m66.net';
    },

    // 変換する http そして https リンク
    '/https?:\/\/m66\.net/' => function($matches) {
        return '<a href="' . $matches[0] . '" target="_blank">' . $matches[0] . '</a>';
    },

    // 英語の番号(ここでのみ処理されます400)
    '/\b400\b/' => function($matches) {
        return numberToWords($matches[0]);
    },

    // 日付形式の変換 YYYY-MM-DD => DD Mon YYYY
    '/\b(\d{4}-\d{2}-\d{2})\b/' => function($matches) {
        return formatDate($matches[1]);
    }
];

$result = preg_replace_callback_array($callbacks, $text);

echo $result;
?>

分析:

  • メールアドレスを一致させるには、すべてのユーザー名パーツをuser123@m66.netなどのアスタリスクに置き換えます。

  • https://m66.netをターゲット= "_ blank"のハイパーリンクに置き換えて、ユーザーエクスペリエンスを向上させます。

  • ナンバー400を英語の単語400に置き換えます。

  • 2025-05-172025年5月17日に変換します。

実行結果:

 郵便:*******@m66.net,Webサイト:<a href="https://m66.net" target="_blank">https://m66.net</a>,連絡先番号:four hundred,発売日:17 May 2025。

4。概要

これらの2つの例を通して、私たちは:

  • preg_replace_callback_arrayは、複数の定期的に一致する複数の通常のパターンをサポートします。これは、複雑な文字列置換要件に非常に適しています。

  • 各パターンは、代替ロジックが明確に分離されるように、独立したコールバック関数にバインドできます。

  • 多様なテキストを扱うとき、単一のpreg_replace_callbackよりも効率的で便利です。

  • 文字変換、フォーマットされた出力、HTMLタグインジェクションなど、交換ロジックを柔軟に拡張できます。

preg_replace_callback_arrayを学ぶ最良の方法は、さまざまなコールバックを作成し、正規表現を組み合わせて、徐々にそのパワーと柔軟性を習得しようとすることです。