wsk3q

导航

C11使用正则表达式

//从我的新浪博客搬过来
//这里引用头文件,挨千刀的新浪博客,这里用尖括号的话,怎么编辑都无法正常显示。
#include "stdio.h"
#include "regex.h"

void TestReg()
{
    regex_t r;
    int reti;
    char msgbuf[100];

   
    reti = regcomp(&r, "^a[[:alnum:]]", 0);
    if (reti) {
        fprintf(stderr, "Could not compile regex\n");
        return;
    }
   
    reti = regexec(&r, "abc", 0, NULL, 0);
    if (!reti) {
        puts("Match");
    }
    else if (reti == REG_NOMATCH) {
        puts("No match");
    }
    else {
        regerror(reti, &r, msgbuf, sizeof(msgbuf));
        fprintf(stderr, "Regex match failed: %s\n", msgbuf);
        return;
    }
   
    regfree(&r);
}

int main()
{
    TestReg();
    return 0;
}
 
=======================
不过编译的时候,会报错:
undefined reference to `regcomp'
undefined reference to `regexec'
undefined reference to `regerror'
 
需要链接regex库。
在g++和mingw的话,可以加入
-lregex
动态链接,发布时需要额外拷贝这几个dll:
libiconv-2.dll
libintl-8.dll
libsystre-0.dll
libtre-5.dll
 
 
如果需要静态链接的话,可以这样:
-Wl,-Bstatic -lregex -ltre -lintl -liconv

如果使用的是CMake的话,可以加入这一句:
 target_link_libraries(testC regex)

target_link_libraries(testC libregex.a libtre.a libintl.a libiconv.a)
 
【完】
 
 
 
 

posted on 2022-12-07 21:40  wsk3q  阅读(83)  评论(0编辑  收藏  举报