读书人

正则有关问题。请帮帮忙

发布时间: 2012-03-02 14:40:29 作者: rapoo

正则问题。请帮帮忙。
使用正则表达式最好是boost库的,取出网页代码中的所有javascript标签内的字符。即 <script> 和 </script> 标签之间的内容。先谢谢。

[解决办法]
taodm ...
[解决办法]
顶一下
[解决办法]
http://zxbc.cn/html/cjc/1909093247627.htm




VC利用boost库解析正则表达式
最近做数据库涉及到解析sql语句,觉得最好的办法是写正则表达式解析,由于vc6没有解析函数,自己写又不甘心,后来从网上找到了boost库,解决了这个问题.
boost下载地址:http://www.boost.org

boost库安装比较麻烦,需要自己编译源文件,我整理了一下,如果仅仅需要做正则表达式,按下面的代码敲就行了.
cmd
vcvars32.bat
cd D:\boost_1_32_0\libs\regex\build
d:
nmake -fvc6.mak
nmake -fvc6.mak install

注意,别看下载下来的数据包没有多大,解压缩之后达到了100多M,编译完之后为109M,占用131M,所以安装时一定注意空出足够的空间,敲入nmake -fvc6.mak后等待的时间比较长,屏幕上还会出现一大堆英语,可以不做考虑.按照步骤往下敲就行了.压缩包内文档很详细,参照文档继续就可以了.

在VC6中集成:Tools-> Options-> Directories-> Include files
加入:D:\boost_1_32_0

编写一个源程序测试一下:

#include "stdafx.h "
#include <cstdlib>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>

using namespace std;
using namespace boost;

regex expression( "^select ([a-zA-Z]*) from ([a-zA-Z]*) ");

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))
{
for(int i=0;i <what.size();i++)
cout < < "str : " < <what[i].str() < <endl;
}
else
{
cout < < "Error Input " < <endl;
}
return 0;
}

输入: select name from table
输出: str:select name from table
str:name
str:table



[解决办法]
qt库里面的QString就有这个功能.
[解决办法]
pBegin是页面数据的开始
regex e( " <script> .*? <script> ");
cmatch what;
while( regex_search( pBegin , what , e ) ){
std::string str( what[0].first , what[0].second );
cout < <str;就是 <script> .... </script> 之间的内容
pBegin = what[0].second;
}
正则不知道写的对不对
[解决办法]
学习。。。
[解决办法]
std::string html = "... <script> code </script> ... ";
boost::regex re( " <script> (.*?) </script> ", boost::regex::icase);
boost::smatch m;
if( boost::regex_search(html, m, re) )
{
std::cout < <m[1].str();
}

读书人网 >C++

热点推荐