PHP에서 MB_EREGI_REPLACE 기능은 사례에 민감하지 않은 다중 바이트 정규식 교체 작업을 수행하는 데 사용됩니다. MBSTRING EXTENSION (예 : UTF-8)을 위해 특별히 설계된 MBString 확장의 일부입니다. 전통적인 Eregi_replace 와 비교할 때 MB_EREGI_REPLACE은 중국어, 일본어 및 한국과 같은 다중 바이트 캐릭터를 처리하는 데 더 적합합니다.
그러나 MB_EREGI_REPLAPE를 사용할 때 많은 개발자가 잘못된 교체 문제를 겪고 있으며 근본 원인은 정규 표현 패턴에 올바른 정기 구문이 사용되지 않는다는 것입니다. 이 기사에서는 정지되지 않은 패턴이 정규식 구문에서 교체 실패를 유발할 수있는 이유를 설명하고 MB_EREGI_REPLACE 의 사용 세부 사항을 설명합니다.
함수 정의는 다음과 같습니다.
string mb_eregi_replace ( string $pattern , string $replacement , string $string [, string $option = "msr" ] )
$ 패턴 : 일치하고 사례에 민감한 정규 표현.
$ 교체 : 교체 문자열.
$ 문자열 : 보류중인 문자열.
$ 옵션 : 정규 표현식의 수정 자, "MSR"의 기본값.
MBString의 다중 바이트 일반 엔진을 내부적으로 사용하므로 일반 구문 및 PCRE ( preg_* )는 약간 다릅니다.
PCRE 구문은 지원되지 않습니다
MB_EREGI_REPLACE는 PCRE가 아닌 MBregex 일반 엔진을 사용합니다. 많은 개발자들은 PCRE 구문 (예 : /패턴 /i를 사용하여 사례를 무시하기 위해)을 사용하는 데 익숙하지만 MB_EREGI_REPLACE 의 $ 패턴 에는 PCRE 스타일 분리기 / 를 포함 할 수 없으며 일부 PCRE 구문 기능을 지원하지 않습니다.
Error example:
mb_eregi_replace('/abc/', 'xyz', $str);
올바른 사용법은 다음과 같습니다.
mb_eregi_replace('abc', 'xyz', $str);
MB_EREGI_REPLACE 자체 자체가 대소 문자를 사용하지 않기 때문에 추가 / 분리기 및 I 수정자가 필요하지 않습니다.
잘못된 탈출 문자
MBregex에서는 일부 특수 문자 및 탈출 방법은 PCRE와 다릅니다. 예를 들어, 숫자 클래스를 나타 내기 위해 \ d를 사용하는 것은 지원되지 않을 수 있으며 [0-9]를 사용해야합니다.
Error example:
mb_eregi_replace('\d+', '숫자', $str);
Correct example:
mb_eregi_replace('[0-9]+', '숫자', $str);
다중 바이트 캐릭터 일치 오용
정규 표현식은 다중 바이트 문자의 특성에 적응해야하며 패턴이 너무 단순화되거나 단일 바이트 가정이 사용되면 일치가 실패하게됩니다.
단락이 있다고 가정합니다.
$str = "Hello mb_eregi_replace example with M66.net URL.";
오류 쓰기 (PCRE 분리기 사용)
echo mb_eregi_replace('/m66\.net/', 'example.com', $str);
이는 구분 기호로 인식되지 않기 때문에 성공적으로 대체되지 않습니다.
올바른 글쓰기
echo mb_eregi_replace('m66\.net', 'example.com', $str);
MB_EREGI_REPLACE는 PCRE 스타일 분리기 및 수정자를 지원하지 않습니다.
정규 표현식은 MBregex 구문 사양을 따라야합니다.
잘못된 패턴으로 인해 함수가 대상 문자열과 일치하지 않으면 자연 교체가 유효하지 않습니다.
멀티 바이트 문자와 일치 할 때 올바른 문자 세트 범위 및 탈출 방법을 사용하는 데 더주의를 기울여야합니다.
MB_EREGI_REPLAPE 의 정기적 인 구문 사양을 이해하면 기능을 더 잘 사용할 수 있고 잘못된 함정을 대체하지 않을 수 있습니다.
<?php
// 올바른 샘플 코드:문자열에 도메인 이름을 넣으십시오m66.net대체하십시오example.com
$str = "URL을 방문하십시오:http://m66.net/path?query=1";
// 알아채다:mb_eregi_replace정기적 인 분리기가 필요하지 않습니다,기본 케이스는 무감각합니다
$result = mb_eregi_replace('m66\.net', 'example.com', $str);
echo $result; // 산출:URL을 방문하십시오:http://example.com/path?query=1
?>