2

我正在用 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;
                  }

这应该与名称为 * 的用户代理匹配,但它会返回所有数据

4

2 回答 2

4

如果不使用 c++0x 原始字符串,则需要双反斜杠'\\'。

于 2011-02-20T19:49:34.580 回答
2

如果你希望它只匹配 User-agent: *不是(例如)User-agent: webcrawler你需要

"^User-agent:\\s*\\*"

* 字符有特殊含义,所以必须用 . 转义\。代码中的(.*)匹配零次或多次出现的任何字符并捕获匹配项。

编辑:您还需要避免橡胶靴指出的反斜杠。

于 2011-02-20T19:48:15.557 回答