0
誰かが私には、以下の出力では、なぜこのコードの結果を説明していただけます。C++ 11 regex_replaceの奇妙な行動
#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main(void) {
std::string test_string("foo.bar.baz.<name>:<value>|@<rate>|#tag:<tag>");
if (std::regex_match(test_string, std::regex(".*(<name>).*"))) {
std::cout << "MATCH!" << std::endl;
} else {
std::cout << "NO MATCH!" << std::endl;
}
test_string = std::regex_replace(test_string, std::regex(".*(<name>).*"), "master");
std::cout << test_string << std::endl;
return 0;
}
出力:
[[email protected] tmp]# ./test
MATCH!
master
をランタイムが壊れているように私には思えます。下のページでregexを検索したが、何も実装されていません。
https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011
それは文字列全体を殺す:[ルート@ 0be8f48dd8d3 /]#./テスト マッチ! master – ladaManiak
まあ、 "何か、次に、次に何か"、 "master"と置き換えるように指示します。 ""を置き換えたい場合は、それだけを正規表現として使用してください。 C++には "このサブマッチのみを置き換える"機能はありません。 –
良い点。私は、regex_replaceが文字列を置換するために一致を使用することを混乱させました。今は理にかなっている。ありがとう! – ladaManiak