문자열 중에서 한글/한자/일어 찾는 정규식

|

아래는 http://kais.tistory.com 블로그에서 퍼온 내용입니다. 더 많은 내용은 http://kais.tistory.com 을 방문하세요.

정규식으로 이런 문자열을 체크하기 위해서는 유니코드 UTF-8로 인코딩 되어야 합니다.
인코딩 되어있지 않다면 iconv 를 통해 UTF-8로 변경하면 됩니다.
 
예제를 위해 한글/한자/일어를 검색을 통해 랜덤으로 뽑아왔습니다. ;;
이 예제에서는 영어나 특수문자를 제외한, '한글', '한자', '일어' 만 추출하는 것을 보여줍니다.

한자는 한국, 중국, 일본 공통으로 사용하는 것을 모은 것이라 일본에서 사용하는 한자를 검출할때는 '한자'와 '일어'를 같이 사용하면 됩니다.
유니코드는 한,중,일 한자를 통합해서 정의해서 따로 구분하려면 유니코드 목록을 참고하셔서 직접 구분하셔야 합니다. -_-;

한가지 주의할 점은 유니코드 문자열을 체크할 경우 u 옵션을 반드시 줘야 합니다.

//  예제 문자열
$content "test content☆漢字〓韓國外交部對外稱, 應美方要求,韓國貿易部長金宗塤和美國貿易代表施瓦布本週一下午還舉行了一個「非正式磋商」。end◆ 日語〓慰謝料としてフルハウス(Full House)をあげるというィヨンジェの言葉に,ジウンは寝ても寝る事ができないで悩む。end◆ 한글〓해쉬(Hash)값 필터링 시스템(Filtering system)은 디지털 파일에 고유의 키 값을 매겨서 등록, 관리하는 것으로 저작권 침해 신고가 접수됐을 경우 이 키 값을 기준으로 검색, 침해 여부를 판단할 수 있는 방식이다. end★";
echo '<pre>';// PRE
  
//  한글
preg_match_all('!['
    .'\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF}'
    .']+!u'$content$match);
print_r($match);
  
//  한자
preg_match_all('!['
    .'\x{2E80}-\x{2EFF}'// 한,중,일 부수 보충
    .'\x{31C0}-\x{31EF}\x{3200}-\x{32FF}'
    .'\x{3400}-\x{4DBF}\x{4E00}-\x{9FBF}\x{F900}-\x{FAFF}'
    .'\x{20000}-\x{2A6DF}\x{2F800}-\x{2FA1F}'// 한,중,일 호환한자
    .']+!u'$content$match);
print_r($match);
  
//  일어
preg_match_all('!['
    .'\x{3040}-\x{309F}'// 히라가나
    .'\x{30A0}-\x{30FF}'// 가타카나
    .'\x{31F0}-\x{31FF}'// 가타카나 음성 확장
    .']+!u'$content$match);
print_r($match);
echo '</pre>';

And