Я хочу захватить именованную подстроку с помощью библиотеки pcre ++.
Я знаю, что библиотека pcre имеет функциональность для этого, но pcre ++ не реализовала это.
Это было у меня сейчас (простой пример):
pcrepp::Pcre regex("test (?P<groupName>bla)");
if (regex.search("test bla"))
{
// Get matched group by name
int pos = pcre_get_stringnumber(
regex.get_pcre(),
"groupName"
);
if (pos == PCRE_ERROR_NOSUBSTRING) return;
// Get match
std::string temp = regex[pos - 1];
std::cout << "temp: " << temp << "\n";
}
Если я отлаживаю, pos возвращает 1, и это правильно, (? Pbla) - 1-й субматч (0 - полное совпадение). Это должно быть хорошо. Но ... regex.matches () возвращает 0. Почему это: S?
Btw. Я делаю регулярное выражение [pos - 1], потому что pcre ++ переиндексирует результат с 0, указывающим на первое совпадение, поэтому 1. Таким образом, 1 становится 0, 2 становится 1, 3 становится 2 и т. Д.
Кто-нибудь знает, как это исправить?