我看了c已经10年了.我需要在c中编写一个解析字符串的小程序.我想使用正则表达式,因为我已经使用它们多年了,但我不知道如何在c中这样做.我花了早上谷歌搜索,我找不到任何直接的例子(即使用这个库,这是方法).有人能给我一个简单的例子吗?
谢谢!
你可以使用PCRE:
PCRE库是一组函数,它们使用与Perl 5相同的语法和语义实现正则表达式模式匹配.PCRE具有自己的本机API,以及一组与POSIX正则表达式API对应的包装函数.即使是用于构建商业软件,PCRE库也是免费的.
有关PCRE示例,请参阅pcredemo.c.
如果您不能使用PCRE,则可能在您的系统上提供POSIX正则表达式支持(正如@tinkertim指出的那样).对于Windows,您可以使用gnuwin Regex for Windows软件包.
该regcomp
文档包括以下示例:
#include/* * Match string against the extended regular expression in * pattern, treating errors as no match. * * Return 1 for match, 0 for no match. */ int match(const char *string, char *pattern) { int status; regex_t re; if (regcomp(&re, pattern, REG_EXTENDED|REG_NOSUB) != 0) { return(0); /* Report error. */ } status = regexec(&re, string, (size_t) 0, NULL, 0); regfree(&re); if (status != 0) { return(0); /* Report error. */ } return(1); }
如果只强制进入POSIX(没有pcre),这里有一个回落的小窍门:
#include#include bool reg_matches(const char *str, const char *pattern) { regex_t re; int ret; if (regcomp(&re, pattern, REG_EXTENDED) != 0) return false; ret = regexec(&re, str, (size_t) 0, NULL, 0); regfree(&re); if (ret == 0) return true; return false; }
你可以这样称呼它:
int main(void) { static const char *pattern = "/foo/[0-9]+$"; /* Going to return 1 always, since pattern wants the last part of the * path to be an unsigned integer */ if (! reg_matches("/foo/abc", pattern)) return 1; return 0; }
我强烈建议使用PCRE(如果有的话).但是,很高兴检查它并有一些退步.
我从目前编辑器中的项目中删除了片段.它只是一个非常基本的例子,但是如果需要,它可以为您提供类型和功能.这个答案或多或少地增加了思南的答案.