次のような文字列があります。
This is a link [[abcd 1234|xyz 1234]] [[India]] [[abcd 1234|xyz 1234]]
そして私は取得したい:
This is a link abcd 1234 [[India]] abcd 1234
| を持つ二重角括弧を取りたい 前のものを取り出す | それを二重角かっこ全体に置き換え、| を持たない二重角かっこを置き換えないでください。ブースト正規表現を使用。
どんな助けでも大歓迎です。
次のような文字列があります。
This is a link [[abcd 1234|xyz 1234]] [[India]] [[abcd 1234|xyz 1234]]
そして私は取得したい:
This is a link abcd 1234 [[India]] abcd 1234
| を持つ二重角括弧を取りたい 前のものを取り出す | それを二重角かっこ全体に置き換え、| を持たない二重角かっこを置き換えないでください。ブースト正規表現を使用。
どんな助けでも大歓迎です。
先読みを使用するだけで、(?!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の間のテキストです。[[|