現在の位置: ホーム> 最新記事一覧> 名前付きグループを使用してコールバックロジックを簡素化します

名前付きグループを使用してコールバックロジックを簡素化します

M66 2025-06-02

PHPでは、 preg_replace_callback_arrayは、複数の正規表現を処理し、一致したときに指定されたコールバック関数を実行できる非常に強力な関数です。通常、各正規表現のコールバック関数を指定する必要がありますが、ロジックの複雑さが増加すると、このアプローチによりコールバック関数が冗長であり、維持が容易ではなくなる可能性があります。このプロセスを簡素化するために、名前のキャプチャグループを使用して、 preg_replace_callback_arrayのコールバックロジックを簡素化し、コードをより明確かつ容易にすることができます。

グループ化という名前は何ですか?

正規表現では、名前付きグループ化は、一致する結果の名前が付けられた識別子であり、数値インデックスだけでなく、名前ごとに一致するコンテンツにアクセスできます。グループに名前を付けるための構文は次のとおりです。

 (?<name>pattern)

ここで、名前はそのグループに与える名前であり、パターンは実際の正規表現パターンです。

名前付きグループ化を使用して、 preg_replace_callback_arrayを簡素化します

preg_replace_callback_arrayでは、通常、複数のパターンと対応するコールバック関数を含む配列を渡します。複数の正規表現を処理する必要がある場合、各式のコールバック関数を記述する必要があることがよくあります。これにより、コードが冗長になります。名前のグループ化を使用することにより、一致する結果をより直感的に取得することができ、それによりコールバックロジックへの依存が減少します。

具体的な例を次に示します。

例:URLのパラメーターの処理

preg_replace_callback_arrayを介してクエリパラメーターの一部を置き換える必要があるURLのセットがあるとします。名前のグループ化を使用して、コールバック関数のロジックを簡素化できます。

 <?php
// 正規表現とコールバック関数を含む配列を定義します
$patterns = [
    '/(?<scheme>https?):\/\/(?<host>[a-zA-Z0-9.-]+)\/(?<path>[^?]+)\?(?<query>.*)/' => function ($matches) {
        // 名前付きグループによるマッチング結果にアクセスします
        $scheme = $matches['scheme'];
        $host = $matches['host'];
        $path = $matches['path'];
        $query = $matches['query'];

        // ここでは、クエリパラメーターを処理できます
        $query = str_replace('example.com', 'm66.net', $query);

        // 交換された文字列を返します
        return $scheme . '://' . $host . '/' . $path . '?' . $query;
    }
];

// 対処すべきこと URL リスト
$urls = [
    'https://example.com/path/to/resource?param1=value1&param2=value2',
    'http://example.com/another/path?param1=value1',
];

// 使用 preg_replace_callback_array 交換します
$updatedUrls = preg_replace_callback_array($patterns, $urls);

// 交換後に結果を出力します
foreach ($updatedUrls as $url) {
    echo $url . PHP_EOL;
}
?>

コード解析:

  1. 正規表現部分:

    • (?<scheme> https?)HTTPまたはHTTPSを一致させ、スキームに名前を付けます。

    • (?<host> [a-za-z0-9 .-]+)ホストのドメイン名と名前を一致させます。

    • (?<athor> [^?]+) :パス部分を一致させ、パスに名前を付けます。

    • (?<Query>。*) :クエリパラメーターパーツを一致させ、クエリに名前を付けます。

  2. コールバック関数パーツ:コールバック関数では、アクセスプロセスを簡素化する一致のグループ化( $ matches ['scheme']など)の名前を付けて正規表現マッチの部分を取得します。また、クエリ文字列部品を処理し、domain name embly.comM66.netに置き換えました。

  3. preg_replace_callback_arrayこの関数は、一連の正規表現とコールバック関数を受け入れ、URLを1つずつ一致させ、対応するコールバック関数を実行します。

結果出力: