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'
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
libintl-8.dll
libsystre-0.dll
libtre-5.dll
如果需要静态链接的话,可以这样:
-Wl,-Bstatic -lregex -ltre -lintl -liconv
-Wl,-Bstatic -lregex -ltre -lintl -liconv
如果使用的是CMake的话,可以加入这一句:
target_link_libraries(testC regex)
或
target_link_libraries(testC libregex.a libtre.a libintl.a libiconv.a)
target_link_libraries(testC libregex.a libtre.a libintl.a libiconv.a)
【完】