C++ヘッダー専用ライブラリの名前空間をカスタム名前空間に囲んで、シンボル名が顧客コードと衝突しないようにしようとしています。perl - multilineの問題でC++ヘッダーを変更する
ここに私が書いたperlスクリプトです。これは、defネームスペースをabcネームスペースに囲む必要があります。
#!/usr/bin/perl
while (<>) {
s/namespace\s+def\s*
(# group 1 - braced string with balanced number of lbraces and rbraces
\{
(# group 2 - String without braces or recursion to group 1
[^\{\}]* # some string that does not contain braces
| (?1) # recursion of group1
)*
\}
)
/namespace abc {\nnamespace def \1\n}/gcsx;
print;
}
、ここで私が使用していますテストファイルされる:
namespace def {}
namespace def { abc }
namespace def { { } }
namespace def { { abcd } }
namespace def {
abc
}
namespace def { // some comment
do_something();
}
namespace def {
do_something();
while (still_not_crashed()) {
do_even_more();
}
}
しかし、ファイル上でスクリプトを実行することだけ
namespace abc {
namespace def {}
}
namespace abc {
namespace def { abc }
}
namespace abc {
namespace def { { } }
}
namespace abc {
namespace def { { abcd } }
}
namespace def {
abc
}
namespace def { // some comment
do_something();
}
namespace def {
do_something();
while (still_not_crashed()) {
do_even_more();
}
}
とすぐに罰金が、1つのラインの名前空間の作品を生み出します一致するはずのパターンに改行が含まれていますが、私はの - 修飾子を正規表現に追加しました。
私は間違っていますか?あなたは、文字列にファイル全体を読み込む必要が
をだからあなたのC++の質問は、あなたのperlスクリプトをデバッグする方法であります? –
私はタグC++を追加しました。なぜなら、いくつかのcppの開発者が同様の状況に遭遇したと思われるからです。それは主にperlの質問です。 – Richard
行ごとに置換を行うので、複数行では機能しません。 – Toto