получить между квадратной скобкой, имеющей конкретную характеристику, с помощью регулярного выражения Boost в C ++ не получить ответ

У меня есть такая строка:

This is a link [[abcd 1234|xyz 1234]]  [[India]] [[abcd 1234|xyz 1234]]

и я хочу получить:

This is a link abcd 1234 [[India]] abcd 1234

Я хочу взять двойные квадратные скобки, имеющие | и достать вещи, которые были до | и замените его на двойную квадратную скобку и не заменяйте двойную квадратную скобку без | используя Boost Regex.

Любая помощь будет оценена.

1

Решение

Просто используйте прогноз, (?!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';
}

демо: http://liveworkspace.org/code/2Mu5cN

1

Другие решения

"\\[\\[(.*?)\|.*?]]"

Это будет соответствовать тексту между [[ а также ]] с | разделитель. $1 это текст между [[ и |,

0