现在使用C#或PHP进行正则表达式非常容易。但是目前我需要在C中使用正则表达式。而且,我似乎并不完全理解regcomp或regexec的用法。这绝对是因为我缺乏C语言经验。
非常感谢任何帮助和示例!
答案 0 :(得分:7)
使用PCRE库。示例包含在demo/
目录中的源中。 Here's a direct link to pcredemo.c
答案 1 :(得分:5)
这可能会让您开始,因为您指出了regex(3)
个功能。以下是一个与其参数相匹配的简单程序。但是,如果您对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;
}
答案 2 :(得分:2)
您需要一个提供它的库,有几个可供选择。 PCRE就是一个。
答案 3 :(得分:1)
还有libslack(str) - 字符串模块:
答案 4 :(得分:0)
gnu C库有一个regex library