Я лично предпочитаю "\\%([^\\%]*)\\%"
(или как необработанную строку R"r(\%([^\%]*)\%)r"
)
Это не зависит от не жадных квалификаторов
Что по существу
- один процентный символ
\\%
- любое количество непроцентных символов
[^\\%]*
- один процентный символ
\\%
Я знаю, что этоtagged boost, но вот решение с помощью std :: regex
#include <string>
#include <regex>
#include <iostream>
int main()
{
using namespace std;
string source = "Hello %world%";
regex match_percent_enclosed (R"_(\%([^\%]*)\%)_");
smatch between_percent;
bool found_match = regex_search(source,between_percent,match_percent_enclosed);
if(found_match && between_percent.size()>1)
cout << "found: \"" << between_percent[1].str() << "\"." << endl;
else
cout << "no match found." << endl;
}