PHP에서 MB_EREGI_REPLACE 기능은 사례 불신 정기 표현식 교체를 지원하는 멀티 바이트 안전 정규 교체 기능입니다. 사용량은 Eregi_replace 와 유사하지만 멀티 바이트 문자열에 최적화됩니다.
교체에 mb_eregi_replace를 사용하는 경우 교체 문자열에서 $ 1을 사용하여 첫 번째 캡처 그룹의 내용을 참조하는 것이 일반적입니다.
$pattern = 'pattern';
$replacement = '$1 something';
mb_eregi_replace($pattern, $replacement, $subject);
그러나 정규식 패턴으로 그룹화가 정의되지 않으면 (즉, 괄호로 둘러싸인 하위 패턴이 없음) $ 1 에는 해당 콘텐츠가 없으며 $ 1은 일반 문자열로 간주되며 일치하는 컨텐츠로 대체되지 않습니다.
이로 인해 대체 결과가 예상되지 않는 결과가 발생할 수 있습니다.
$ 1 및 $ 2 와 같은 특수 기호는 캡처 그룹의 내용을 정규 표현식으로 참조하는 데 사용됩니다. 정규 표현이 괄호로 그룹화되지 않으면 이러한 참조는 유효하지 않습니다.
예를 들어:
$pattern = 'hello';
$replacement = '$1 world';
$subject = 'hello';
// 그룹화 없음,$1 해당 콘텐츠가 없습니다
echo mb_eregi_replace($pattern, $replacement, $subject);
이 코드의 결과는 다음과 같습니다.
$1 world
상상 대신 :
hello world
교체 결과에서 $ 1을 사용하려면 정규 표현식에 해당 캡처 그룹이 있는지 확인해야합니다.
예를 들어, 모드를 다음으로 변경합니다.
$pattern = '(hello)';
$replacement = '$1 world';
$subject = 'hello';
echo mb_eregi_replace($pattern, $replacement, $subject);
출력 결과는 다음과 같습니다.
hello world
알아채다:
괄호를 사용하여 참조 할 부분을 감싸서 캡처 그룹화를 나타냅니다.
일치하는 문자열 전체 만 캡처하더라도 $ 1을 사용할 수 있습니다.
일부 정기적 인 교체 함수에서 $ 0는 전체 일치 문자열을 나타냅니다. 불행히도, MB_EREGI_REPLACE는 $ 0를 지원하지 않으며 그룹화에서 $ 1 , $ 2 등만 참조 할 수 있습니다.
그룹화를 추가하기 위해 패턴을 수정하는 것이 편리하지 않은 경우 MB_EREG_REPLAY_CALLBACK 과 같은 콜백 함수를 대신 지원하는 대체 기능을 사용한 다음 콜백에서 일치하는 로직을 처리 할 수 있습니다.
예:
$pattern = 'hello';
$subject = 'hello';
$result = mb_ereg_replace_callback($pattern, function ($matches) {
// $matches[0] 전체 경기입니다
return $matches[0] . ' world';
}, $subject);
echo $result;
산출:
hello world
MB_EREGI_REPLACE는 $ 1 과 $ 2를 사용하여 그룹화 컨텐츠를 참조하며 해당 캡처 그룹이 정규 표현식에 존재하도록해야합니다.
그룹화가 없으면 $ 1은 일치하는 콘텐츠로 대체되지 않지만 일반 문자열로 취급됩니다.
그룹을 추가하고 싶지 않거나 추가 할 수없는 경우 콜백 기능을 사용하여 복잡한 교체를 구현하는 것이 좋습니다.