在C ++中使用正则表达式查找[/和]之间的数字

时间:2015-06-09 13:52:35

标签: c++ regex boost

我想找到ErrorDocument 404 http://rafflehaven.net/404 RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.*?)/?$ $1.php [L] RewriteCond %{DOCUMENT_ROOT}/$1.html -f RewriteRule ^(.*?)/?$ $1.html [L] [/之间的数字(在这种情况下为])。

我写了这样的代码:

12345

但是,我收到此错误:float num; string line = "A111[/12345]"; boost::regex e ("[/([0-9]{5})]"); boost::smatch match; if (boost::regex_search(line, match, e)) { std::string s1(match[1].first, match[1].second); num = boost::lexical_cast<float>(s1); //convert to float cout << num << endl; }

2 个答案:

答案 0 :(得分:1)

您需要双倍转义[]正则表达式character classes中的特殊字符。正确的正则表达式声明将是

boost::regex e ("\\[/([0-9]{5})\\]");

这是必要的,因为C ++编译器还使用反斜杠来转义\n之类的实体,而正则表达式引擎使用反斜杠来转义特殊字符,以便将它们视为文字。因此,反斜杠加倍。当你需要匹配文字反斜杠时,你将不得不使用其中的4个(即\\\\)。

答案 1 :(得分:1)

使用以下内容(转义[],因为它们是正则表达式中的特殊字符,表示字符类):

\\[/([0-9]{5})\\]
^^            ^^