C#이나 PHP에서 정규 표현식을 사용하면 매우 편리합니다. 그러나 현재 C에서 regex를 사용할 필요가 있습니다. 그리고 regcomp 또는 regexec의 사용법을 완전히 이해하지 못하는 것 같습니다. 그것은 C에서의 경험이 부족하기 때문입니다.C에서 정규 표현식
어떤 도움과 예제가 많이 감사 할 것입니다!
C#이나 PHP에서 정규 표현식을 사용하면 매우 편리합니다. 그러나 현재 C에서 regex를 사용할 필요가 있습니다. 그리고 regcomp 또는 regexec의 사용법을 완전히 이해하지 못하는 것 같습니다. 그것은 C에서의 경험이 부족하기 때문입니다.C에서 정규 표현식
어떤 도움과 예제가 많이 감사 할 것입니다!
있습니다. 다음은 그 주장과 일치하는 사소한 프로그램입니다. 그러나 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(®, *argv, REG_NOSUB|REG_EXTENDED)) {
char errbuf[1024];
regerror(r, ®, errbuf, sizeof(errbuf));
printf("error: %s\n", errbuf);
return 1;
}
for (++argv; *argv; ++argv) {
if (regexec(®, *argv, 0, NULL, 0) == REG_NOMATCH)
continue;
printf("matched: %s\n", *argv);
}
return 0;
}
PCRE 라이브러리를 사용하십시오. 예는 출처의 demo/
디렉토리에 있습니다. Here's a direct link to pcredemo.c
.
GNU C 라이브러리는 regex(3)
기능을 표시로이, 당신은 시작 얻을 수있는 regex library
예, 사용 방법을 알아 내지 못했습니다 ... 즉 regcomp와 regexec 함수 – Dave
libslack도 있습니다 (STR) - string 모듈 :
이
완벽한 감사 당신! – Dave
또한 John Millikin의 답변도 이와 비슷합니다. 그의 예제는 PCRE를위한 것이고 pilcrow 's는 GNU C Lib의 정규 표현식을위한 것입니다. – Dave