匹配一个“.” 在与类的字符串std::tr1::regex
中使我使用了一种奇怪的解决方法。
为什么我需要检查“\\\\.” 代替 ”\\。”?
regex(".") // Matches everything (but "\n") as expected.
regex("\\.") // Matches everything (but "\n").
regex("\\\\.") // Matches only ".".
有人可以解释我为什么吗?这真的让我很困扰,因为我的代码是使用boost::regex
类编写的,它不需要这种语法。
编辑:对不起,regex("\\\\.")
似乎什么都不匹配。
Edit2:一些代码
void parser::lex(regex& token)
{
// Skipping whitespaces
{
regex ws("\\s*");
sregex_token_iterator wit(source.begin() + pos, source.end(), ws, regex_constants::match_default), wend;
if(wit != wend)
pos += (*wit).length();
}
sregex_token_iterator it(source.begin() + pos, source.end(), token, regex_constants::match_default), end;
if (it != end)
temp = *it;
else
temp = "";
}