c正则表达式howto

我看了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,如果可用的话。 但是,很高兴检查它并有一些退步。

我从目前编辑器中的项目中删除了片段。 它只是一个非常基本的例子,但是如果需要,它可以为您提供类型和function。 这个答案或多或少地增加了思南的答案。

除了本机C库之外的另一个选择是使用Python或Perl等其他语言的接口。 不必处理C的字符串处理,对正则表达式更好的语言支持应该让事情变得更容易。 您还可以使用SWIG之类的工具生成用于从C调用代码的包装器。

您还应该查看正则表达式库。 它使用正则表达式,例如可以写入Linux Shell的表达式。

有关更多信息,请在Linux下键入“man regcomp”,不带引号