Есть ли способ получить PREMATCH ($ `) и POSTMATCH ($ ') из pcrecpp? - PullRequest
1 голос
/ 14 марта 2010

Есть ли способ получить эквивалент C ++ для Perl PREMATCH ($ `) и POSTMATCH ($ ') из pcrecpp? Я был бы счастлив со строкой, символом * или парами индексов / startpos + length, которые указывают на это.

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

в perl:

$_ = "Hello world";
if (/lo\s/) {
    $pre = $`; #should be "Hel"
    $post = $'; #should be "world"
}

в C ++ я хотел бы что-то вроде:

string mystr = "Hello world"; //do I need to map this in a StringPiece?
if (pcrecpp::RE("lo\s").PartialMatch(mystr)) { //should I use Consume or FindAndConsume?
   //What should I do here to get pre+post matches???
}

pcre plainjane c, похоже, имеет возможность возвращать вектор со совпадениями, включая «конечную» часть строки, поэтому я теоретически мог бы извлечь такую ​​переменную pre / post, но это кажется большой работой. Мне нравится простота интерфейса pcrecpp.

Предложения? Спасибо!

- Eric

1 Ответ

3 голосов
/ 14 марта 2010

Вы можете использовать FullMatch вместо PartialMatch и явно записывать предварительные и собственные сообщения, например,

string pre, match, post;
RE("(.*)(lo\\s)(.*)").FullMatch("Hello world", &pre, &match, &post);
...