У меня есть такая строка:
This is a link [[abcd 1234|xyz 1234]] [[India]] [[abcd 1234|xyz 1234]]
и я хочу получить:
This is a link abcd 1234 [[India]] abcd 1234
Я хочу взять двойные квадратные скобки, имеющие | и достать вещи, которые были до | и замените его на двойную квадратную скобку и не заменяйте двойную квадратную скобку без | используя Boost Regex.
Любая помощь будет оценена.
Просто используйте прогноз, (?!pattern)
#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main()
{
std::string str = "This is a link [[abcd 1234|xyz 1234]] [[India]] [[abcd 1234|xyz 1234]]";
boost::regex re("\\[\\[(((?!\\]\\]).)+)\\|.*?]]");
std::cout << boost::regex_replace(str, re, "$1") << '\n';
}
"\\[\\[(.*?)\|.*?]]"
Это будет соответствовать тексту между [[
а также ]]
с |
разделитель. $1
это текст между [[
и |
,