>  기사  >  백엔드 개발  >  정규식을 사용하여 PHP_php 팁에서 중국어 구현 메모 추출

정규식을 사용하여 PHP_php 팁에서 중국어 구현 메모 추출

WBOY
WBOY원래의
2016-05-16 20:25:321106검색

최근 상사가 저에게 중국어 필드가 포함된 파일에서 중국어 필드를 추출 및 저장하고 PHP를 사용하여 개발하는 데이터 중복 검사에 대한 간단한 연습을 요청했습니다. 중간은 PHP 정규식의 중국어 매칭 문제에 관한 내용인데, 인터넷에서 많이 검색해 봤지만 역시 너무 헷갈리고 정확한 정보가 없어서 직접 코드를 수정하고 테스트한 후 추출 함수를 먼저 적어봤습니다.

가장 먼저 주목해야 할 점은 2바이트 문자의 인코딩 문제입니다. 여기서 향후 한국어, 일본어 등의 인코딩 문제가 발생할 수도 있습니다. 이는 중국어와 동일한 의미입니다.

1. GBK(GB2312/GB18030)

코드 복사 코드는 다음과 같습니다.

x00-xff GBK 더블바이트 인코딩 범위
x20-x7f ASCII
xa1-xff 중국어 gb2312
x80-xff 중국어 gbk

2. UTF-8(유니코드)
코드 복사 코드는 다음과 같습니다.

u4e00-u9fa5(중국어)
x3130-x318F (한국어
xAC00-xD7A3 (한국어)
u0800-u4e00 (일본어)

메모장에서 먼저 평소에 쓰는 글이 잘못된 것인지 테스트할 수 있습니다. 첫 번째 표현식을 테스트하기 위해 [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진수 데이터를 나타내는 데 사용됩니다. 다음으로 코드를 최적화하면 감지 기능은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

클래스 storeDataAdapter는 Store를 확장합니다{
          비공개 $dsData;                                                 /**
* 데이터 변환 함수, preg_match_all을 호출하여 $pattern 규칙성을 기반으로 수치 매칭을 수행하고, 반환된 결과를 배열 형태로 $matches에 저장합니다.
* $matches[0]에는 전체 패턴과 일치하는 텍스트가 포함되고, $matches[1]에는 캡처된 첫 번째 대괄호의 하위 패턴과 일치하는 텍스트가 포함됩니다.
* @see Store::data_convert()
                     */                                공용 함수 data_convert($pattern,$subject) {
                  $matches=array();                                     If (preg_match_all($pattern, $subject,$matches)){
                        $matches[0] 반환;                                ~                                                                                   null 반환;                                 ~ ~ }  



이 호출되면 다음과 같이 됩니다.





코드 복사

코드는 다음과 같습니다.


$store=새 storeDataAdapter($txtContent)
$match=배열()
$dsName=$store->data_convert('/[x7f-xff] /',$txtContent)
foreach($dsName을 $val로){
echo $val."
"; }  

입력 파일은 다음과 같습니다.

, 다음은 중국어를 추출한 후 출력되는 파일 내용입니다.

예상 요구 사항에 부합합니다.

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