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. (使用步骤)ThinkPHP3.1.2中如何配置Ckeditor_4.1.1和Ckfindtor(转)

    ThinkPHP3.1.2中如何配置Ckeditor_4.1.1和Ckfindtor  一.下载Ckeditor和Ckfinder Ckeditor官网 http://ckeditor.com/dow ...

  2. JDK6 下载地址

    http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-41940 ...

  3. MVC系列之开始

     4月5号晚本来应该写出来的,这几天迷上了炉石传说,打得有点疯,明天又得上班了,收拾心情还是得写出来.上星期5晚上回家的时候,不得不吐槽一下的确有点背.6点下班冲去江夏地铁站,赶7点15分到江门的轻轨 ...

  4. Javascript --扩展String实现替换字符串中index处字符

    String.prototype.replaceCharAt = function(n,c){ return this.substr(0, n)+ c + this.substr(n+1,this.l ...

  5. Android Studio 2.2 External Build

    今天在用studio写Native程序时发现2.2版本引入了一个 External Build来进行Native项目的构建. 最直观的表现就是c/c++的源码文件不用跟java文件在一个项目文件夹下了 ...

  6. [转] Python特殊语法:filter、map、reduce、lambda

    Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(ite ...

  7. .Net4.0如何实现.NET4.5中的Task.Run及Task.Delay方法

    前言 .NET4.0下是没有Task.Run及Task.Delay方法的,而.NET4.5已经实现,对于还在使用.NET4.0的同学来说,如何在.NET4.0下实现这两个方法呢? 在.NET4.0下, ...

  8. Google代码实验室

    https://code.google.com/p/google-styleguide/

  9. shell入门之流程控制语句 分类: 学习笔记 linux ubuntu 2015-07-10 16:38 89人阅读 评论(0) 收藏

    1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...

  10. nodejs 按行读取 readline

                fs.mkdirSync('./yotmp');      }                  log(out);               input: file,    ...