当前位置:  开发笔记 > 编程语言 > 正文

c正则表达式howto

如何解决《c正则表达式howto》经验,为你挑选了2个好方法。

我看了c已经10年了.我需要在c中编写一个解析字符串的小程序.我想使用正则表达式,因为我已经使用它们多年了,但我不知道如何在c中这样做.我花了早上谷歌搜索,我找不到任何直接的例子(即使用这个库,这是方法).有人能给我一个简单的例子吗?

谢谢!



1> Sinan Ünür..:

你可以使用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);
}



2> Tim Post..:

如果只强制进入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(如果有的话).但是,很高兴检查它并有一些退步.

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

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有