2009-08-25 3 views
4

C#이나 PHP에서 정규 표현식을 사용하면 매우 편리합니다. 그러나 현재 C에서 regex를 사용할 필요가 있습니다. 그리고 regcomp 또는 regexec의 사용법을 완전히 이해하지 못하는 것 같습니다. 그것은 C에서의 경험이 부족하기 때문입니다.C에서 정규 표현식

어떤 도움과 예제가 많이 감사 할 것입니다!

답변

5

있습니다. 다음은 그 주장과 일치하는 사소한 프로그램입니다. 그러나 C를 처음 사용하는 사람이라면 포인터와 배열로 작업 할 것이므로 regex(3)으로 천천히 가고 싶을 것입니다. 오프셋과 라이온스, 호랑이와 곰도 regmatch_t을 제공합니다. ;)

$ ./regexec '[[:digit:]]' 56789 alpha " " foo12bar 
matched: 56789 
matched: foo12bar 
$ ./regexec '[[:digit:]](foo' 
error: Unmatched (or \(
$ ./regexec '[' 
error: Invalid regular expression 

... 소스 :

#include <sys/types.h> 
#include <regex.h> 
#include <stdio.h> 

int main(int argc, char **argv) { 
    int r; 
    regex_t reg; 

    ++argv; /* Danger! */ 

    if (r = regcomp(&reg, *argv, REG_NOSUB|REG_EXTENDED)) { 
    char errbuf[1024]; 
    regerror(r, &reg, errbuf, sizeof(errbuf)); 
    printf("error: %s\n", errbuf); 
    return 1; 
    } 

    for (++argv; *argv; ++argv) { 
    if (regexec(&reg, *argv, 0, NULL, 0) == REG_NOMATCH) 
     continue; 
    printf("matched: %s\n", *argv); 
    } 

    return 0; 
} 
+0

완벽한 감사 당신! – Dave

+0

또한 John Millikin의 답변도 이와 비슷합니다. 그의 예제는 PCRE를위한 것이고 pilcrow 's는 GNU C Lib의 정규 표현식을위한 것입니다. – Dave

7

PCRE 라이브러리를 사용하십시오. 예는 출처의 demo/ 디렉토리에 있습니다. Here's a direct link to pcredemo.c.

+0

펄 호환 정규 표현식 라이브러리 - 아니다 그게 인권법에 위배되는거야? –

+0

PCRE는 거의 표준이며, 정규 표현식을 다루는 작가와 유지 관리자가 훨씬 쉽게 사용할 수 있습니다. – strager

+0

그리고 ... 필자가 필요로하는 것은 C 언어의 PCRE 사용 예제입니다. TT – Dave

2

제공하는 라이브러리가 필요하며 선택할 수있는 라이브러리가 필요합니다. PCRE은 하나입니다.

+0

존 (John)과 더크 (Dirk)에게 필자는 PCRE를 이미 설치했지만 C 언어로 그 사용법에 관심이 있다고 생각합니다. – Dave

0

GNU C 라이브러리는 regex(3) 기능을 표시로이, 당신은 시작 얻을 수있는 regex library

+0

예, 사용 방법을 알아 내지 못했습니다 ... 즉 regcomp와 regexec 함수 – Dave