我正在为C ++寻找一个正则表达式(或其他东西)库,它允许我指定一些模式,在字符串上运行并返回所有模式的匹配位置。
例如: 模式{“abcd”,“abcd”} 字符串{“abcd abce abcd”}
结果: abcd比赛:0-3,11-14 abce匹配:5-9
有人知道这样的图书馆吗?
答案 0 :(得分:2)
我推荐使用boost :: xpressive http://www.boost.org/doc/libs/1_39_0/doc/html/xpressive.html。
可能的解决方案之一:
string text = "abcd abce abcd";
static const sregex abcd = as_xpr("abcd"); // static - faster
sregex abce = sregex::compile( "abce" ) // compiled
sregex all = *(keep(abcd) | keep(abce));
smatch what;
if( regex_match( text, what, all ) )
{
smatch::nested_results_type::const_iterator begin = what.nested_results().begin();
smatch::nested_results_type::const_iterator end = what.nested_results().end();
for(;it != end; it++)
{
if(it->regex_id() == abcd.regex_id())
{
// you match abcd
// use it->begin() and it->end()
// or it->position() and it->length()
continue;
}
if(it->regex_id() == abce.regex_id())
{
// you match abcd...
continue;
};
}
我认为这不是最佳解决方案,您可以在文档中查看“语义操作和用户定义的断言”。
答案 1 :(得分:0)
答案 2 :(得分:0)
正则表达式是标准扩展tr1的一部分,并在许多标准库中实现(即dinkumware)
我认为自己编写周围代码非常简单。
答案 3 :(得分:0)
不适用于简单的或?
"abcd|abcd"
这是一个有效的正则表达式。