C++/C中使用轻量级的正则表达式
来源:互联网 发布:java 查看函数签名 编辑:程序博客网 时间:2024/06/05 03:18
由于编译原理上机实验中有一道题是关于词法分析的程序设计,里面需要用到正则表达式来匹配标示符以及关键保留字,但是标准C++库中没有正则表达式引擎,网上虽然有其他方法比如大名鼎鼎的boost库,但是在c++中使用boost的正则表达式引擎则略显麻烦,毕竟为了一个很简单的小程序用上重量级的boost库有点大材小用了。庆幸的是在网上发现了一个很轻量级,用起来超方便的正则表达式引擎“DEELX 正则引擎”官方网站
http://www.regexlab.com/zh/regref.htm
在里面可以下载库(其实也就一个头文件,没想到会这么轻量级吧,嘿嘿),更为令人兴奋地是里面有中文帮助文档,并且文档上对常用正则表达式应用也讲的很是详细,
兴奋ing
下面上个demo,匹配代码中的注释(仅匹配/* */注释,如果还想匹配//注释可以自己扩展)
#include "deelx.h"#include<stdio.h>
int find_remark(const char * string, int & start, int & end){ // declare static CRegexpT <char> regexp("/\\*((?!\\*/).)*(\\*/)?|//([^\\x0A-\\x0D\\\\]|\\\\.)*"); // find and match MatchResult result = regexp.Match(string); // result if( result.IsMatched() ) { start = result.GetStart(); end = result.GetEnd (); return 1; } else { return 0; }}int main(int argc, char * argv[]){ char * code1 = "int a; /* a */"; char * code2 = "int a;"; int start, end; if( find_remark(code1, start, end) ) printf("In code1, found: %.*s\n", end - start, code1 + start); else printf("In code1, not found.\n"); if( find_remark(code2, start, end) ) printf("In code2, found: %.*s\n", end - start, code2 + start); else printf("In code2, not found.\n"); return 0;}
说明:
本例中的表达式,考虑了 C 注释(/*...*/)以及 C++ 注释(//...)。
但未排出注释标记位于字符串内部的情况。
- C++/C中使用轻量级的正则表达式
- 【C#】C#中正则表达式的使用
- C中使用正则表达式
- 正则表达式的使用(C++)
- linux下的C中正则表达式的使用
- 在C语言中使用正则表达式的几个API
- C/C++中使用的正则表达式库
- 在c语言中使用正则表达式
- c语言中使用正则表达式
- C/C++中使用正则表达式
- C语言中使用正则表达式
- linux C 中使用正则表达式
- object C 中使用正则表达式
- object C 中使用正则表达式
- C语言中使用正则表达式
- c语言中使用正则表达式
- C语言中正则表达式如何使用
- C#——正则表达式的使用
- dom选择器自己写
- 实用负载均衡技术:网站性能优化攻略
- 设计模式中类的关系
- 打造超炫的专属Eclipse
- win8使用vmware不断重启问题
- C++/C中使用轻量级的正则表达式
- 关于CFile试用Write写文件时出现乱码的解决办法
- tmpfs
- 集体智慧常用的算法
- lamp环境搭建
- iOS多线程编程指南 线程管理
- 获取当前SILVERLIGHT程序存放网络URL的前缀
- 第 1 章 策略模式【Strategy Pattern】
- mysql 主键自增长