>백엔드 개발 >PHP 튜토리얼 >PHP의 더 이상 사용되지 않는 `preg_replace()` `/e` 수정자를 `preg_replace_callback()`으로 안전하게 대체하는 방법은 무엇입니까?

PHP의 더 이상 사용되지 않는 `preg_replace()` `/e` 수정자를 `preg_replace_callback()`으로 안전하게 대체하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-19 12:15:16490검색

How to Safely Replace PHP's Deprecated `preg_replace()` `/e` Modifier with `preg_replace_callback()`?

preg_replace()의 '/e' 수정자를 preg_replace_callback()으로 바꾸세요.

정규 표현식은 특히 그룹 및 교체 캡처 작업을 할 때 위협적일 수 있습니다. '/e' 수정자를 사용하여 preg_replace()에서 대체 작업을 해독해 보겠습니다.

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

여기서 목표는 '^'(문자열의 시작) 또는 '_'( 밑줄).

'/e' 수식어 이해

'/e' modifier는 대체 문자열을 PHP 코드로 평가합니다. '2'는 '^' 또는 '_' 다음에 오는 소문자인 두 번째 캡처된 그룹을 나타냅니다. 그러나 이 수정자는 보안상의 이유로 더 이상 사용되지 않습니다.

preg_replace_callback()으로 전환

preg_replace_callback()은 대체 문자열 대신 콜백 함수를 제공하여 더 안전한 대안을 제공합니다.

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

콜백 함수

익명 함수는 일치 항목의 배열을 인수로 사용합니다. 여기서 $matches[1]은 '^' 또는 '_'을 나타내고 $matches[2]는 대문자로 표시되는 문자를 나타냅니다.

패턴 교환

'/e'에 유의하세요. preg_replace_callback()을 사용할 때는 수정자를 제거해야 합니다. 위 패턴은 다음과 같이 단순화됩니다.

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

변수 범위 지정

익명 함수는 'use' 키워드를 사용하여 명시적으로 가져온 변수에만 액세스할 수 있습니다.

문제점

  • '/e' 수정자는 인수에서 슬래시를 제거합니다. preg_replace_callback().
  • 'use' 키워드를 사용하면 변수를 콜백으로 가져올 수 있어 변수 범위 지정 문제를 해결할 수 있습니다.

위 내용은 PHP의 더 이상 사용되지 않는 `preg_replace()` `/e` 수정자를 `preg_replace_callback()`으로 안전하게 대체하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.