ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규식 - POSIX regex in C language
    2011. 9. 1. comments
    반응형

    데이터 검색과 가공, 처리에 있어서 정규식은 유용하게 사용되어 지고 있다. 정규식을 알아두면 개발자 입장에서 구현을 할 때 유용하게(시간을 줄일수 있는...) 사용되어 질 수 있다.

    정규식(Regular expression)이란 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어이다.
     
     
    C언어에서도 정규식을 사용할 수 있다.
    엄밀히 말해, POSIX에서 지원되는 정규식인데,  다음과 같은 함수들을 지원해준다.

           
           int regcomp(regex_t *preg, const char *regex, int cflags);
    
           int regexec(const regex_t *preg, const char *string, size_t nmatch,
                       regmatch_t pmatch[], int eflags);
    
           size_t regerror(int errcode, const regex_t *preg, char *errbuf,
                           size_t errbuf_size);
    
           void regfree(regex_t *preg);
    
    


    regcomp
       regcomp을 통하여 정규식(특정한 규칙을 갖는 문자열)을 정의.

    regexec
       regexec를 통하여 입력된 값이 정규식에 포함되었는지를 확인하고 매칭 정보를 리턴.

    regerror
      regerror는 regcomp와 regexec가 실패할 경우 실패이유를 string으로 변환.

    regfree
      regfree는 사용을 다한 정규식 리소스를 반환.


    간단한 사용 예를 확인해보자. 첫번째 인자로 정규식을 결정하고, 두번째 인자로 입력값을 받아서 입력받은 값이 정규식에 포함되는지를 확인하는 함수이다.

    int posix_regex_match( char* regex, char* input )
    {
      if( regex == NULL || input == NULL )
        return -1;
    
      regex_t ext_regex;
      int ret = regcomp(&ext_regex, regex, REG_EXTENDED);
    
      if( ret != 0 )
      {
        return 0;
      }
    
      ret = regexec( &ext_regex, input, 0, NULL, 0);
      regfree(&ext_regex);
      return (!ret);
    }
    
    int main(int argc, char** argv)
    {
      posix_regex_match( argv[1],argv[2]);
      return 0;
    }
    


    반응형

    댓글

Designed by Tistory.