최근 상사가 저에게 중국어 필드가 포함된 파일에서 중국어 필드를 추출 및 저장하고 PHP를 사용하여 개발하는 데이터 중복 검사에 대한 간단한 연습을 요청했습니다. 중간은 PHP 정규식의 중국어 매칭 문제에 관한 내용인데, 인터넷에서 많이 검색해 봤지만 역시 너무 헷갈리고 정확한 정보가 없어서 직접 코드를 수정하고 테스트한 후 추출 함수를 먼저 적어봤습니다.
가장 먼저 주목해야 할 점은 2바이트 문자의 인코딩 문제입니다. 여기서 향후 한국어, 일본어 등의 인코딩 문제가 발생할 수도 있습니다. 이는 중국어와 동일한 의미입니다.
1. GBK(GB2312/GB18030)
메모장에서 먼저 평소에 쓰는 글이 잘못된 것인지 테스트할 수 있습니다. 첫 번째 표현식을 테스트하기 위해 [u4e00-u9fa5]를 사용했습니다. 기호는 둘 이상을 나타냅니다.
문자가 일치합니다. 결과는 예상과 동일합니다. 그러면 이 정규 규칙을 스크립트에서 사용할 수 있습니까?
preg_match_all('/[u4e00-u9fa5] /', $subject,$matches)를 사용하여 테스트해 보면 다음 결과가 표시됩니다. 컴파일 실패: PCRE는 L, l, N {name}을 지원하지 않습니다. , U 또는 u가 오프셋 2에 있습니다. . . . 아주 크지 않나요? ? 그 이유는 무엇입니까?
많은 정보를 상담한 결과 u(PCRE_UTF8)가 위의 PCRE라는 것을 알게 되었습니다. 이는 Perl 호환 정규식 라이브러리를 포함하는 Perl 라이브러리입니다. 이 수정자는 Perl과 호환되지 않는 PCRE의 추가 기능을 활성화합니다. 패턴 문자열은 UTF-8로 처리됩니다. 이 수정자는 Unix에서는 PHP 4.1.0부터, win32에서는 PHP 4.2.3부터 사용할 수 있습니다. PHP 정규 표현식에는 16진수 데이터를 표현하는 다양한 방법이 있습니다. PHP에서 x는 16진수 데이터를 나타내는 데 사용됩니다. 다음으로 코드를 최적화하면 감지 기능은 다음과 같습니다.
코드는 다음과 같습니다.
, 다음은 중국어를 추출한 후 출력되는 파일 내용입니다.
예상 요구 사항에 부합합니다.