Как перебирать именованные группы в xpressive? - PullRequest
5 голосов
/ 23 декабря 2011

Скажем, у меня есть sregex объект, подобный этому:

boost::xpressive::sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!");

Я не смог найти никаких ссылок в документации по xpressive относительно этого, несмотря на то, что xpressive поддерживает именованные группы просто отлично.

Я знаю, что можно итерировать по группам - это нормально, но как мне получить доступ к имени группы (если у группы вообще есть имя)?

Итак, как бы я прошел поименованные группы?

1 Ответ

4 голосов
/ 28 декабря 2011

Предполагая, что у нас есть целое регулярное выражение, над которым вы работаете, мне кажется, что вы пытаетесь создать регулярное выражение, которое соответствует обеим именованным перехватам, поэтому бесполезно пытаться перебиратьименованный захват.

Вам просто нужно попробовать что-то подобное.

std::string str("foo bar");
sregex rx = sregex::compile("(?P<firstword>\\w+) (?<secondword>\\w+)!");
smatch what;
if(regex_search(str, what, rx))
{
    std::cout << "char = " << what["firstword"]  << what["secondword"] std::endl;
}

Если регулярное выражение является частью более сложного шаблона, почему бы не использовать статический именованный захват: http://www.boost.org/doc/libs/1_41_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.named_captures.static_named_captures

...