不需要boost::regex库的能进行正则表达式的代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不需要boost::regex库的能进行正则表达式的代码?相关的知识,希望对你有一定的参考价值。

参考技术A 可以啊,2008以后版本的STL提供了正则表达式,不需要boost也可以用了
下面是我给别人写的一个例子
#include
"stdafx.h"
#include
"stdio.h"
#include
<regex>
#define
TR1
std::tr1
void
main()

///
读取文件实例代码,你自己修改一下路径.
//
std::ifstream
file("路径");
//
///
读取文件的内容.
//
std::string
sFileContent(std::istreambuf_iterator<char>(file.rdbuf()),
std::istreambuf_iterator<char>());
///
为了方便测试,我把你的文件内容直接弄成字符串了.
const
std::string
sFileContent("\
INPUT(G1gat)\n\
INPUT(G2gat)\n\
INPUT(G3gat)\n\
INPUT(G6gat)\n\
INPUT(G7gat)\n\
OUTPUT(G22gat)\n\
OUTPUT(G23gat)\n\
G10gat
=
nand(G1gat,
G3gat)\n\
G11gat
=
nand(G3gat,
G6gat)\n\
G16gat
=
nand(G2gat,
G11gat)\n\
G19gat
=
nand(G11gat,
G7gat)\n\
G22gat
=
nand(G10gat,
G16gat)\n\
G23gat
=
nand(G16gat,
G19gat)\n\
");
TR1::regex
regInput("INPUT\\(G([\\d])gat\\)");
TR1::smatch
matchRes;
int
nMatchFlag
=
TR1::regex_constants::match_default;
std::string::const_iterator
itBegin,
itEnd;
itBegin
=
sFileContent.begin();
itEnd
=
sFileContent.end();
while
(std::tr1::regex_search(itBegin,
itEnd,
matchRes,
regInput,
(TR1::regex_constants::match_flag_type)nMatchFlag))

std::cout
<<
"匹配结果:
"
<<
matchRes[0]
<<
std::endl;
std::cout
<<
"匹配到的数字:
"
<<
matchRes[1]
<<
std::endl;
itBegin
=
matchRes[0].second;
nMatchFlag
=
std::tr1::regex_constants::match_prev_avail|std::tr1::regex_constants::match_not_bol;

Boost之正则表达式Regex库的使用方法

这个程序可以简洁的挑出了目标字符串。

#include <cstdlib>   
#include <stdlib.h>   
#include <boost/regex.hpp>   
#include <stdlib.h>
#include <string>   
#include <iostream>   
using namespace std;  
using namespace boost;  

regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");//定义正则表达式expression   

int main(int argc, char* argv[])  
{  
    std::string in;  
    cmatch what;  
    cout << "enter test string" << endl;  
    getline(cin,in);  
    if(regex_match(in.c_str(), what, expression))//regex_match:匹配算法,用于测试一个字符串是否和正则式匹配   
    {  
        for(int i=0;i<what.size();i++)  
            cout<<"str :"<<what[i].str()<<endl;  
    }  
    else  
    {  
        cout<<"Error Input"<<endl;  
    }  

    system("pause");

    return 0;  
} 

以上是关于不需要boost::regex库的能进行正则表达式的代码?的主要内容,如果未能解决你的问题,请参考以下文章

与 boost 正则表达式库的递归匹配

使用 Boost::regex 进行正则表达式组匹配

C++ 中三种正则表达式比较(C regex,C ++regex,boost regex)

boost库之正则表达式regex

如何转义字符串以在 Boost Regex 中使用

在 C++ 中使用 boost:regex_error 时未定义符号?