ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규식 online tester - regex101 & preg_match_all
    프로그래밍/자연어처리 2018. 5. 5. 19:25
    728x90
    반응형




    자연어처리를 하다보면 종종 정규식을 사용하게 되는데

    정규식 (pcre)를 코드에 반영하기 이전에 

    온라인에서 내가 짠 정규식이 제대로 작동하는지 확인하고 싶을 경우가 있다. 




    그럴때 사용할 수 있는 온라인 정규식 tester & debugger 사이트를 소개 한다. 


    https://regex101.com/


    사이트 바로가기 







    왼쪽의 FLAVOR 메뉴에서 php의 pcre, javascrip, python, golang등의 

    다양한 정규식 처리를 할 수 있는 프로그램 언어를 선택할 수 있다. 



    빌라 이름에서 ()로 들어가 있는 문자열을 찾아 

    ()에 들어가 있는 세부 정보를 제거 하고 

    대표 빌라 이름들만 추출하고 싶어 정규식을 작성하였다. 

    한글도 되어 있는 빌라 이름이 없으면 그냥 숫자라도 남기기로 했다. 



    REGULAR EXPLRESSION  에서 자신이 원하는 정규식을 작성하면 

    아래 TEST STRING에서 정규식에 속하는 샘플들만 하이라이트 된다. 

    그리고 오른쪽의 MATCH INFORMATION에서 

    TEST STRING에서 정규식에서 추출된 이름들이 나열된다. 











    현재 정규식으로도 내가 찾기 원하는 패턴을 찾을 수 있지만 

    정규식에서는 추출하기를 원하는 패턴을  ()을 묶어 세부 패턴으로 지정할 수 있다. 

    앞에 있는 빌라 이름만 추출하고 싶어 첫번째 세부 패턴 ()를 추가 하였다. 

    문자열에 들어가 있는 문자 ( ) 와 세부 패턴은 escape 문자인 \로 구분이 된다. 

    문자인 ( 과 )는 \로 escape   처리를 해 주었다. 






    테스트 한 결과가 마음에 들면 

    왼쪽의 TOOLS에서 code generator에서 

    프로그래밍 언어별로 코드를 생성할 수도 있다. 







    preg_match_all 함수는 링크에서 자세한 내용을 확인할 수 있다. 


    preg_match_all( string $pattern, string $subject, 

    [, array $matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]]



    필수 옵션은 $pattern (정규식), $subject(문자열)이 있고 

    그 외 옵션은 아래와 같다. 


    $matches : 정규식을 찾은 결과를 저장하는 다차원 배열

    $flags : 정규식으로 찾은 문자열을 저장하는 방식 

     (PREG_PATTERN_ORDER, PREG_SET_ORDER 등) 


    PREG_PATTERN_ORDER으로 하면 $matches[0]에 찾은 전체 문자열이 들어가고

     $matches[1] 부터 ()으로 명시한 세부 패턴의 문자열이 들어간다. 


    PREG_SET_ORDER 으로 하면 

    $matches[*][0]에 찾은 전체 문자열이 들어가고

    $matches[*][1] 부터 ()으로 명시한 세부 패턴의 문자열이 들어간다. 

    *은 전체 세부 패턴의 개수만큼 있다. 


     $offset : 패턴이 찾기 시작하는 위치. 처음부터 찾기 시작하면 0. 



    preg_match 


    function get_alias($str)

    {

            $re = '/(.+)\(.+\)/';


                   preg_match($re, $str, $matches);


            // Print the entire match result

            var_dump($matches);

            return $matches[1];


    }


    string : 중앙힐타운(나)(450-11)


    array(2) {

      [0]=>

      string(28) "중앙힐타운(나)(450-11)"

      [1]=>

      string(20) "중앙힐타운(나)"

    }














    728x90
    반응형
Designed by Tistory.