2012-04-11 56 views
3

我正在使用boost :: xpressive来解析我的文本文件。我想看看是否只有当行以'#'开头(多次)。boost :: xpressive查看序列的开头

我使用下面的代码

std::string str1 = "## this could be my line"; 
sregex rex1 = sregex::compile("^#+"); 
smatch result1; 
if(regex_match(str1,result1,rex1){ 
    std::cout << result1[0] << '\n'; 
}else{ 
std::cout << "match not found!\n"; 
} 

但我总是得到“匹配未找到!”,甚至当行以#开头。有人能帮我一下吗?

令人难以置信,任何人都可以帮助我使用boost :: xpressive'bos'来编写rex1语句吗?

谢谢! Ayesha

回答

3

使用regex_search而不是regex_match

这里是为rex1静态xpressive中的语法:

bos >> +as_xpr('#'); 
+0

哇!非常感谢!它工作!你能解释为什么regex_match不匹配?我认为'##'应该匹配'^#+'。 – 2012-04-11 21:26:11

+0

@Ayesha:'“##”'确实匹配'“^#+”',但是'“##这可能是我的行”(如你的问题的代码)不会。引用[文档](http://www.boost.org/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.quick_start),“*要使regex_match()成功,整个字符串必须与正则表达式匹配,从开始到结束。*“所以你的正则表达式必须是'”^#+。*“'以使'regex_match'能够处理你的问题的输入。提示:阅读文档。 ; - ] – ildjarn 2012-04-11 21:30:54

+0

明白了!非常感谢。必须更仔细地重新阅读文档! – 2012-04-11 21:35:46