1

次のような文字列があります。

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

そして私は取得したい:

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

| を持つ二重角括弧を取りたい 前のものを取り出す | それを二重角かっこ全体に置き換え、| を持たない二重角かっこを置き換えないでください。ブースト正規表現を使用。

どんな助けでも大歓迎です。

4

2 に答える 2

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

于 2012-12-18T15:33:54.907 に答える
0
"\\[\\[(.*?)\|.*?]]"

[[これにより、]]と の間のテキストが|区切り文字と一致します。と$1の間のテキストです。[[|

于 2012-12-18T14:36:32.720 に答える