Есть ли способ получить PREMATCH ($`) и POSTMATCH ($') от pcrecpp?

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

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

в перле:

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

в С++ у меня было бы что-то вроде:

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.

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

--Эрик


person Eric Peers    schedule 14.03.2010    source источник


Ответы (1)


Вы можете использовать FullMatch вместо PartialMatch и явно записывать pre и post самостоятельно, например.

string pre, match, post;
RE("(.*)(lo\\s)(.*)").FullMatch("Hello world", &pre, &match, &post);
person Logan Capaldo    schedule 14.03.2010