我的c++怎么了?正则表达式匹配
我正在用 c++ 编写一个 robots.txt 解析器,
boost::regex exrp( "^User-agent:\s*(.*)");
boost:: match_results<string::const_iterator> what;
if(boost::regex_search( robots, what, exrp ) )
{
string s( what[1].first, what[1].second );
cout<< s;
}
这应该与名称为 * 的用户代理匹配,但它返回所有数据
i am writing an robots.txt parser in c++
boost::regex exrp( "^User-agent:\s*(.*)");
boost:: match_results<string::const_iterator> what;
if(boost::regex_search( robots, what, exrp ) )
{
string s( what[1].first, what[1].second );
cout<< s;
}
this should match the useragent with name * but it it returns all datas
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您不使用 c++0x 原始字符串,则需要双反斜杠 '\\'。
You need the double backslash '\\' if you don't use c++0x raw strings.
如果您希望它仅匹配
User-agent: *
而不是(例如)User-agent: webcrawler
您需要* 字符有特殊含义,所以必须用
\
转义。代码中的(.*)
匹配零次或多次出现的任何字符并捕获匹配项。编辑:您还需要按照橡胶靴指出的那样转义反斜杠。
If you want it to match only
User-agent: *
and not also (e.g.)User-agent: webcrawler
you needThe * character has a special meaning, so must be escaped with
\
. The(.*)
in your code matches zero or more occurrences of any character and captures the match.Edit: You also need to escape the backslashes as pointed out by rubber boots.