現在の位置: ホーム> 最新記事一覧> 不要な$は、キャプチャ以外のグループ化とコンテンツを一致させないでください

不要な$は、キャプチャ以外のグループ化とコンテンツを一致させないでください

M66 2025-06-02

PHPでは、 PREG_REPLACE_CALLBACK_ARRAY関数は通常、通常の交換を実行するときにコールバック操作を実行するために使用されます。この関数は、キーが正規表現であり、値がマッチングを処理するコールバック関数である配列を受け入れます。ただし、場合によっては、特定のグループをキャプチャして$マッチに表示されないようにするため、不必要なオーバーヘッドまたは複雑な処理が行われます。

非キャプチャパケットの使用

不要な$を受信しないように、 preg_replace_callback_arrayのコールバック関数のコンテンツと一致するために、キャプチャ以外のグループ化を使用できます。非キャプチャグループ化により、一部のグループが一致するときにキャプチャされないことを保証し、それにより、コールバック関数の不必要なマッチング結果を減らします。

非キャプチャグループとは何ですか?

非キャプチャグループは、括弧内に括弧を付けて正規表現で宣言されますか?: 。たとえば、 (?:...)は非キャプチャグループです。この場合、正規表現のグループは$マッチアレイにキャプチャされるのではなく、マッチパターンをグループ化するために使用されるコンポーネントのみです。

サンプルコード

内部の複数のグループを持つ正規表現があると仮定しますが、他のグループの内容ではなく、一部のグループの一致するコンテンツのみを気にしているとします。次に、非キャプチャグループを使用して、正規表現を最適化できます。

 <?php
// 例:にテキストを交換しますURL
$pattern = '/(?:https?:\/\/)(m66.net\/[a-z0-9\/\?=&]*)/i';
$replacement = function ($matches) {
    // ただ気をつけてくださいURLのパス部分,全体を必要としませんURLおよび契約セクション
    return 'https://m66.net' . $matches[1];
};

$input = '訪問してください https://m66.net/abc/def?query=xyz または http://m66.net/12345';
$output = preg_replace_callback_array([
    $pattern => $replacement,
], $input);

echo $output;
?>

コード解析

  1. 正規表現

    • (?:https?:\/\/) :この部分は、URLのプロトコル部分(httpまたはhttps)と一致する非キャプチャグループです。この部分は必要ないので、キャプチャ以外のグループ化を使用します。

    • (m66.net \/[a-z0-9 \/\?=&]*) :これはキャプチャグループであり、 M66.netの背後にあるパス部分( /abc/def?query = xyzなど)です。

  2. コールバック関数

    • コールバック関数では、プロトコルパーツ( https://またはhttp:// )を無視して、 $マッチ[1]を介してURLのパス部分を取得します。

    • プロトコルの部分はキャプチャされていないため、 preg_replace_callback_arrayは、コールバック関数の置換値として$ Matches [1]のみを提供します。

  3. 出力結果

    • 元のテキストのURLは、私たちが気にする形式に正しく置き換えられており、不要な$のコンテンツはありません。

要約します

非キャプチャグループ(?:...)を使用すると、コールバック関数で不要なマッチンググループの受信を避けるのに役立ちます。これにより、不必要なリソースの消費が減少するだけでなく、特に複雑な正規表現を扱う場合、コードをより簡潔で理解しやすくするため、注意が必要な一致する結果を効果的に減らすことができます。