C++中使用正规表达式操作字符串
来源:互联网 发布:淘宝买药货到付款骗局 编辑:程序博客网 时间:2024/05/22 07:52
一、前言
之前在C++中使用正规表达式是比较头痛的问题,要么需要引用第三方库,要么需要自己实现匹配过程。虽然使用第三方的库确实可行,但对程序的移植带来一定的困难,有时不得不带上笨重的Boost库或使用为Perl开发的C语言库,新的C++标准中加入了对正规表达式的支持,这的确是大快人心,因为在字符串处理中或多或少使用正规表达式能达到事半功倍的效果,且程序的健壮性得到很好的保持。下面就使用C++的正规表达式写个Hello World等级的程序,旨在抛砖引玉。
二、正规表示支持的C++标准实现
STL使用固然简单,但要查看源代码实现确实是A piece of shit,铺天盖地的模板让人找不着北。废话少说,简要介绍下STL中正规表达式部分。
引入的头文件名为regex,其中定义的几个几个模板类,重要的如basic_regex,match_results,regex_error等,其余的几个类为常量定义或个性化模板,提供的方法有regex_search,regex_match,regex_replace,regex_swap,这些就是最期望看到的函数,从函数名称就能看出大概实现什么功能。其中最后一个比较少用外,其余三个是必不可少的选择。
头文件中还定义了数目较多的常量和个性化模板类型,可根据需要进行选取,避免的自己写大量typedef语句,具体内容可以参看一份STL的头文件即可。
三、Hello World程序
本示例程序使用了查找、匹配和替换三个函数,使用交换函数也相对简单,如法泡制即可。在替换函数中需要说明的是Format参数支持Look Back方式的替换,即根据正规表达式可以取到子表达式匹配的内容用于执行替换,这部分也是正规表达式很常用的。
下面是源程序代码:
#include <string>#include <regex>#include <iostream>using namespace std;int main(int argc, char *argv[]){string s("I went to Wikipedia tonight to look up Steve Jobs’ birthday to write this post.");regex rx("W[a-z]+a");cmatch mr;if(regex_search(s.c_str(),mr,rx)){cout<<"Found the words:";for_each(mr.begin(),mr.end(),[](string si){cout<<si<<" ";});cout<<endl;}cout<<endl;string fmt("bbs");s = regex_replace(s,rx,fmt);cout<<"Result string is :"<<s<<endl;cout<<endl;rx.assign("[A-Za-z ’\\.]+");if(regex_match(s,rx)){cout<<"The string is matched"<<endl;}else{cout<<"The string is not matched"<<endl;}cout<<endl;return 0;}
运行效果如下图所示:
- C++中使用正规表达式操作字符串
- C#中的字符串和正规表达式
- 正规表达式的使用
- 正规表达式转NFA(C++)
- Python中使用正规表达式实现查找和匹配串
- VC# 2005中的字符串和正规表达式
- VC# 2005中的字符串和正规表达式
- 正规表达式
- 正规表达式
- 正规表达式
- 正规表达式
- 正规表达式
- C中字符串操作
- JS中正规表达式相关函数详解
- JavaCC中扩展的正规表达式
- 使用正规表达式编写更好的 SQL
- 使用正规表达式编写更好的 SQL
- 使用正规表达式编写更好的 SQL
- Too many open files in system 错误处理
- 【例8.2】 由圆和高多重继承派生出圆锥。
- 人生是什么?——感悟1:勇于承担自己的选择才是真正的勇气
- 子线程与主线程通过Handler进行通信
- phpmyadmin简介
- C++中使用正规表达式操作字符串
- android简易网页播放器
- 如何做个优秀的程序员,优秀程序员的十个习惯
- 怎样成为优秀的程序员
- 软件包 javax.servlet.http 不存在 import javax.servlet.http.*; 如果是用editplus
- The Scientist and Engineer's Guide to Digital Signal Processing
- FileUpload上传的基本步骤 2
- C++中使用Lambda演算
- 程序员面试宝典(三)P107