`
runfeel
  • 浏览: 904773 次
文章分类
社区版块
存档分类
最新评论

采用正则表达式获取文本文件中的特定模式字符串

 
阅读更多
一直以为用Python写一些简单的小程序很方便,用C++编写由于可用的库太少,支持跨平台的库更少,因此比较费时费力。事实确实如此,但是灵活学习和使用一门语言,最好的方法就是把身边的一些小程序实现出来。在这个过程中不仅可以熟悉语言特性,而且可以把一些好的设计模式运用其中。

今天,这里我写了一段采用正则表达式获取文本文件中的特定模式字符串的小程序,希望对大家有帮助。

头文件如下:

#ifndef FIND_EXPR_STR_IN_FILE_H
#define FIND_EXPR_STR_IN_FILE_H

#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>
#include <boost/regex.hpp>

using namespace std;

class FindExprStrInFile
{
private:
string _fileNameWithPath;
string _notification;
int _count;
vector<string> _findStrs;

public:
FindExprStrInFile(string name, string exprStr);
bool find();
int getCount();
vector<string>::const_iterator getFirstIter();
vector<string>::const_iterator getLastIter();
};

#endif




FindExprStrInFile类函数定义文件和main函数定义如下:


#include "FindExprStrInFile.h"

FindExprStrInFile::FindExprStrInFile(string name, string exprStr)
{
_fileNameWithPath = name;
_notification = exprStr;
_count =0;
}

bool FindExprStrInFile::find()
{
if (_fileNameWithPath == "" || _notification == "")
{
cout << "input parameter is null!" << endl;
return false;
}
std::ifstream fin(_fileNameWithPath.c_str());
if(!fin.is_open())
{
cout<<"The file path is not exist, please check it again."<<endl;
return false;
}
int nCount = 0;
boost::regex reg(_notification);
boost::smatch what;
while(!fin.eof())
{
std::string inbuf;
getline(fin, inbuf,'\n');
try {
std::string::const_iterator start = inbuf.begin();
std::string::const_iterator end = inbuf.end();
while(boost::regex_search(start, end, what, reg))
{
start = what[0].second;
//std::cout <<"Find it in current line: "<< what[0].str().c_str()<<std::endl;
_findStrs.push_back(what[0].str());
//_findStrs.push_back(what[1].str());
_count++;
}
}
catch(const boost::bad_expression& e)
{
std::cout <<"That's not a valid regular expression! (Error: " << e.what() << ") Exiting...\n";
}
}
fin.close();

return true;
}


int FindExprStrInFile::getCount()
{
return _count;
}

vector<string>::const_iterator FindExprStrInFile::getFirstIter()
{
return _findStrs.begin();
}

vector<string>::const_iterator FindExprStrInFile::getLastIter()
{
return _findStrs.end();
}

int main()
{
FindExprStrInFile exprFile("D:/Test.txt", "www\\.(.*)\\.com");
if(!exprFile.find())
{
cout<<"There is no string matched!"<<endl;
getchar();
return -1;
}

cout<<exprFile.getCount()<<endl;;
vector<string>::const_iterator iter;
for(iter=exprFile.getFirstIter(); iter!=exprFile.getLastIter(); ++iter)
{
cout<<"Matched string: "<<iter->c_str()<<endl;
}
getchar();
}


D:/Test.txt文件中内容
/******************************
www.sina.com
www.163.com
www.google.com.cn
www.hao123.com
www.csdn.net
*******************************/

运行结果:



The MIT license:

Permission is hereby granted, freeof charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnishedto do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.



分享到:
评论

相关推荐

    正则表达式.docx 正则表达式是一种用于描述字符串模式的工具,通常用于文本搜索和匹配 它可以帮助你在文本中找到特定模式的字符串

    它可以帮助你在文本中找到特定模式的字符串,或者对文本进行替换、拆分等操作。在C语言中,正则表达式通常使用 `&lt;regex.h&gt;` 头文件中的函数来实现。 下面是一个简单的C程序示例,演示如何使用正则表达式: ```c #...

    Java使用正则表达式提取XML节点内容的方法示例

    主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作技巧,需要的朋友可以参考下

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    获取字符串长度.asp 第13章(/14/) Matches集合与Macth对象.asp 指定忽略大小写.asp 获取Matches集合.asp 进行正则匹配替换.asp 进行正则匹配检验.asp ...

    正则表达式

    正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来...

    精通 JavaScript正则表达式

    正则表达式可以: •测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个...•根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字

    正则表达式工具类

    典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,...基于模式匹配从字符串中提取子字符串。 可以查找文档内或输入域内特定的文本。

    正则表达式简明教程及正则表达式语言元素

    正则表达式的全面样式匹配表示法使您可以快速分析大量文本以找到特定的字符样式,提取、编辑、替换或删除文本子字符串,或将提取的字符串添加到集合以生成报告。对于处理字符串(例如 HTML 处理、日志文件分析和 ...

    C#中利用正则表达式实现

    正则表达式的全面模式匹配表示法可以快速地分析大量的文本以找到特定的字符模式;提取、编辑、替换或删除文本子字符串;或将提取的字符串添加到集合以生成报告。对于处理字符串(例如 HTML 处理、日志文件分析和 ...

    正则表达式的具体介绍.docx

    正则表达式 正则表达式,又称规则表达式,是计算机科学的一个概念,也是对字符串操作的一种逻辑公式。... 文本替换:正则表达式可以用来替换文本中的特定模式。例如,将所有的电子邮件地址替换为链接形式,或将特

    使用Python正则表达式操作文本数据的方法

    使用正则表达式对象在字符串中搜索模式。 可选:从字符串中提取匹配的模式。 编写和使用正则表达式 在Python中创建正则表达式的第一步是导入re 模块: import re Python正则表达式使用模式字符串表示,模式字

    正则表达式必知必会

    2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。正则表达式的特点是:1. 灵活性、逻辑性和功能性非常的强;2. 可以迅速地用极简单的方式达到字符串的复杂控制。3. 对于刚接触的人来说,比较晦涩难懂。...

    mysql正则表达式(regexp和rlike)的搜索功能实例分析

    本文实例讲述了mysql正则表达式(regexp和rlike)的搜索功能。分享给大家供大家参考...使用正则表达式的优点是,不限于在like运算符中基于具有百分号(%)和下划线(_)的固定模式搜索字符串。 使用正则表达式,有更多的元

    使用正则表达式找出不包含特定字符串的条目

    例如枚举出日志文件中不包含某个特定字符串的条目,找出不以某个特定字符串打头的条目,等等。 使用否定式前瞻 正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的...

    Python正则表达式

    概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这 些特定字符的组合,组成一个...2.可以通过正则表达式,从字符串中获取我们想要的特定部分。 3.还可以对目标字符串进行替换操作

    js常用的正则表达式

    它具有用正则表达式模式去匹配或代替一个串(string)中特定字符(或字符集合)的属性(properties)和方法(methods)。 正则表达式构造函数: new RegExp("pattern"[,"flags"]); 参数说明: pattern -- 一个正则表达式...

    JavaScript正则表达式详解

    简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下: 测试字符串的某个模式。...根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

    python-17-正则表达式.zip

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这 些特定字符的组合,组成一个“规则字符串”,这个“规则...正则表达式是一种文 本模式,模式描述在搜索文本时要匹配一个或多个字符串。

    正则表达式参考文档chm

    正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好...正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。

    正则表达式从入门到精通

    使用正则表达式,就可以: •测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话... •根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

Global site tag (gtag.js) - Google Analytics