gcc 4.8中已经包含了std regex的头文件

可是没有实现,所以链接是失败的

gcc 4.9完整的支持了c++ 11的regex。

在4.9以前,可以寻求boost的regex。

不过,我更熟悉pcre,基于perl的正则表达式的实现。

下载源码,解压

将库配置为交叉编译,只生成静态库,配置pcre代码如下:

#!/bin/sh

export ROOTDIR="${PWD}"
cd pcre-8.36/ export CROSS_COMPILE="arm-linux-androideabi" export AR=${CROSS_COMPILE}-ar
export AS=${CROSS_COMPILE}-as
export LD=${CROSS_COMPILE}-ld
export RANLIB=${CROSS_COMPILE}-ranlib
export CC=${CROSS_COMPILE}-gcc
export CXX=${CROSS_COMPILE}-g++
export NM=${CROSS_COMPILE}-nm ./configure --prefix=${ROOTDIR}/build/pcre --target=${CROSS_COMPILE} --host=${CROSS_COMPILE} --build=i686-linux --disable-shared

执行make && make install 编译生成目标文件

接下来我们开始使用libpcre库

枚举所有匹配的项,并将结果打印出来,代码如下:

 #include "pcre.h"
#include <string>
#include <vector>
#include <iostream> int main(void)
{
const int OVECCOUNT = ;
std::string src_string = "Saturday=6 and Sunday=7, but some Fridays=5 joke=102 also.";
std::string regex_string = "\\w+=\\d+";
bool b_case = false; const char* error;
int erroffset;
int ovector[OVECCOUNT];
std::vector<std::string> sfinds;
pcre* re = pcre_compile(regex_string.c_str(), b_case ? PCRE_CASELESS : ,
&error, &erroffset, NULL);
if(re)
{
unsigned int offset = ;
unsigned int len = src_string.size();
const char* str = src_string.c_str();
int rc = ;
while(offset < len && (rc = pcre_exec(re, , str, len, offset, , ovector, OVECCOUNT)) >= )
{
std::cout << "find count: " << rc << std::endl;
for(int i = ; i < rc; ++i)
{
int s_len = ovector[*i+] - ovector[*i];
std::string sfind = src_string.substr(ovector[*i], s_len);
sfinds.push_back(sfind);
}
offset = ovector[];
} pcre_free(re);
} for(size_t i = ; i < sfinds.size(); ++i)
std::cout << "*" <<sfinds[i] << "* ";
std::cout << std::endl; return ;
}

编译运行regex,输出结果为:

find count: 1
find count: 1
find count: 1
find count: 1
*Saturday=6* *Sunday=7* *Fridays=5* *joke=102*

关于pcre正则表达式库libpcre的更多相关文章

  1. [原创]C语言利用pcre正则表达式库

    C语言使用正则表达式,可以利用pcre库,这个比较不错的哦. 在使用过程中,利用python进行测试正则表达式是否OK,后发现出现了问题.如下所示: regex.c:11:18: warning: u ...

  2. 编译 pcre - 开源的正则表达式(库)

    PCRE百科介绍: PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库.这些在执行正规表达式模式匹配时用与Perl ...

  3. 深入浅出C/C++中的正则表达式库

    写在前面: 本文是面向有正则表达式基础的读者朋友的,如果你还不知道正则表达式是什么,请先到这里学习一下  :http://en.wikipedia.org/wiki/Regular_expressio ...

  4. php中PCRE正则表达式分隔符的使用

    转自:http://www.baiwar.com/post/the-use-of-php-pcre-regex-delimiter.html 在php5.3.0以前,PHP可使用两套正则表达式规则,一 ...

  5. Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答

    Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答 Boost正则表达式库regex常用search和match示例 发表回复   Boo ...

  6. python爬虫之re正则表达式库

    python爬虫之re正则表达式库 正则表达式是用来简洁表达一组字符串的表达式. 编译:将符合正则表达式语法的字符串转换成正则表达式特征 操作符 说明 实例 . 表示任何单个字符 [ ] 字符集,对单 ...

  7. 在C++ Builder6上使用Boost正则表达式库

    本文关键词:正则表达式 c++ python 软件 正则表达式是一种模式匹配形式,它通常用在处理的文本程序中.比如我们经常使用的grep工具,还是perl语言都使用了正则表达式. 正则表达式是一种模式 ...

  8. VS2010中使用boost正则表达式库

    1.下载boost库.http://www.boost.org/ 我下载的是boost_1_51_0版本.放在D:\opensource\boost_1_51_0. 2.编译boost库.     执 ...

  9. 【regex】POSIX标准正则表达式库

    在linux C 下面没有编译成功使用?号的非贪婪模式. 网上的一句话:the ? only works for Perl-based regexp, not for POSIX... 如果需要使用非 ...

随机推荐

  1. java第四周学习

    这一周学习的还是面向对象的方法和应用 Java中方法的使用和注意事项 如果没有返回值,就不允许通过return关键字返回结果 方法中不允许嵌套使用 Return返回值只允许返回一个值,不允许返回多个 ...

  2. C#将数据以XML格式写入Excel

    本文转载:http://www.cnblogs.com/eflylab/archive/2008/09/21/1295580.html c#将数据导入Excel另类方法 今天公司突然给个Excel模版 ...

  3. 使用 maven:archetype 创建JSF2 + EJB3.1 + JPA2项目骨架并在JBoss WildFly 8.1上部署

    运行下面命令创建项目骨架: mvn archetype:generate -DarchetypeGroupId=org.jboss.spec.archetypes -DarchetypeArtifac ...

  4. 淘宝分布式数据层:TDDL[转]

    淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个 ...

  5. photoshopcs5 win7安装报错的解决

    因为之前安装了绿色中文破解版的PhotoShop CS5,虽然卸载了,但是注册表还可能残留了其它信息,导致在安装Adobe PhotoShop CS5英文版时一直显示 (Exit Code: 7 ER ...

  6. TOJ1693(Silver Cow Party)

    Silver Cow Party   Time Limit(Common/Java):2000MS/20000MS     Memory Limit:65536KByte Total Submit: ...

  7. [Redux] Supplying the Initial State

    We will learn how to start a Redux app with a previously persisted state, and how it merges with the ...

  8. PHP拦截器的使用(转)

    PHP有如下几个拦截器: 1.__get($property)功能:访问未定义的属性是被调用2.__set($property, $value)功能:给未定义的属性设置值时被调用3.__isset($ ...

  9. Linux网络基础

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3840284.html ...

  10. Ant学习笔记(1) 基础知识

    Ant Apache Ant 是一个基于 Java的构建工具. 下载Ant google.baidu.Windows用户下载zip格式.解压即可. Windows安装Ant Ant本质上是一个Java ...