ホームページ >バックエンド開発 >PHPチュートリアル >PHP の非推奨の `preg_replace` 内の `/e` 修飾子を `preg_replace_callback` に安全に置き換えるにはどうすればよいですか?

PHP の非推奨の `preg_replace` 内の `/e` 修飾子を `preg_replace_callback` に安全に置き換えるにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-27 12:35:11621ブラウズ

How Can I Safely Replace PHP's Deprecated `/e` Modifier in `preg_replace` with `preg_replace_callback`?

preg_replace_callback による修飾子のエスケープ

課題:

/e などの正規表現修飾子は PHP では非推奨になりました。これは、次のコードの /e 修飾子を代替の preg_replace_callback に置き換えようとするときに問題になります:

public static function camelize($word) {
   return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\2")', $word);
}

後方参照の理解:

The /e修飾子は、バックスラッシュを数字 (1) に置き換えて、一致した文字列のキャプチャされた部分を表します。たとえば、指定された式 (^|_)([a-z]) では、最初のキャプチャは (^|_) で、2 番目のキャプチャは ([a-z]) です。

preg_replace_callback の代替案:

preg_replace_callback は、キャプチャされたサブパターンの配列を引数として受け取るコールバック関数を受け取ります。最初のサブパターンはインデックス 0 にあり、2 番目のサブパターンはインデックス 1 にあり、以下同様です。

コードへの適用:

/e 修飾子を置き換えるには、以下が必要です。置換文字列を匿名関数に変換します:

function($m) { return strtoupper($m[2]); }

この関数は、一致する配列 $m を受け取り、2 番目にキャプチャされたものを返します。サブパターンは大文字に変換されます。

すべてを組み合わせる:

最終的なコードは次のようになります:

public static function camelize($word) {
   return preg_replace_callback('/(^|_)([a-z])/', function($m) { return strtoupper($m[2]); }, $word);
}

その他の考慮事項:

  • から /e 修飾子を削除します正規表現パターン。
  • コールバック引数をより読みやすくするには、名前付きキャプチャ グループ ((?Ppattern)) の使用を検討してください。
  • 変数のスコープに注意し、use キーワードを使用して、コールバックで外部変数にアクセスします。

以上がPHP の非推奨の `preg_replace` 内の `/e` 修飾子を `preg_replace_callback` に安全に置き換えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。