R"xxx()xxx": xxx可以被替换成任何字符串,不可以包含括号和双引号,而且你需要保证两边是一样的。如果你这样写,那么括号里面的任何字符都不会被转义,甚至是换行符也没有问题。这种字符串语法用来写正则表达式就特别的方便。
R"xxx()xxx"
可以详细说下用法吗, 感觉不是很理解.
走同样的路,发现不同的人生
あなたが理解できないのかRしないのかxxxは分かりませんので、すべてお話します
R
xxx
まずは RRaw String を表す
Raw String
たとえば、次のテキスト
Raw Stringが登場する前は、次のように記述する必要がありました
文字列内の特殊記号はエスケープする必要があります
しかし、Raw String を持った後は、次のように書くことができます
つまり、括弧 Raw String 内のテキストは 表示されている内容が取得されるものです
おそらく、なぜ括弧が必要なのか疑問に思っているかもしれません。
テキストについて考える
括弧がない場合は R"abc"efg" と記述されるため、どちらが対になっている二重引用符 であるかを判断することができないため、
R"abc"efg"
括弧を導入した後、原文に引用符 + 括弧があった場合はどうすればよいでしょうか? たとえば リーリー
と書く必要があり、これでは明らかに文法ミスが発生し、どのペアが R"(abc)"efg)")"であるか判断できなくなります。テキストに が含まれていますが、 )" では () を区切るのに十分ではありません
R"(abc)"efg)"
)"
()
したがって、 (区切り文字) delimiter をカスタマイズする必要があります。これは、質問の です。xxx(...)xxx の上の文字列は、 および R"xxx(abc)"efg)xxx" として記述できます。プログラマは、 に含まれるすべてがオリジナルのテキストであることがわかります。 もちろん、xxx(...)xxx をカスタマイズすることもできます。 と記述することもできます。
delimiter
xxx(...)xxx
R"xxx(abc)"efg)xxx"
これは C++11 の生の文字列リテラルです
出力
つまり、括弧内の単語はエスケープされず、そのまま出力されます。 正規表現では「"」が頻繁に使用されるため、この方法では「"」を「\」に変換する問題を回避できます。 例:
このメソッドを使用しない場合は、次のように記述する必要があります:
カスタム分割文字列の目的: 生の文字列がどこで終わるかを識別します。
あなたが理解できないのか
R
しないのかxxx
は分かりませんので、すべてお話しますまずは
から始めましょう。R
Raw String
を表すたとえば、次のテキスト
リーリー
リーリーRaw String
が登場する前は、次のように記述する必要がありました文字列内の特殊記号はエスケープする必要があります
しかし、
リーリーRaw String
を持った後は、次のように書くことができますつまり、括弧
Raw String
内のテキストは 表示されている内容が取得されるものですおそらく、なぜ括弧が必要なのか疑問に思っているかもしれません。
テキストについて考える
リーリー括弧がない場合は
R"abc"efg"
と記述されるため、どちらが対になっている二重引用符であるかを判断することができないため、
括弧を導入した後、原文に引用符 + 括弧があった場合はどうすればよいでしょうか? たとえば
上記の書き方によれば、リーリー
と書く必要があり、これでは明らかに文法ミスが発生し、どのペアが
R"(abc)"efg)"
)"
であるか判断できなくなります。テキストに が含まれていますが、
)"
では()
を区切るのに十分ではありませんしたがって、 (区切り文字)
delimiter
をカスタマイズする必要があります。これは、質問の です。xxx(...)xxx
の上の文字列は、および
R"xxx(abc)"efg)xxx"
として記述できます。プログラマは、に含まれるすべてがオリジナルのテキストであることがわかります。 もちろん、
xxx(...)xxx
をカスタマイズすることもできます。と記述することもできます。
これは C++11 の生の文字列リテラルです
リーリー出力
リーリーつまり、括弧内の単語はエスケープされず、そのまま出力されます。
リーリー正規表現では「"」が頻繁に使用されるため、この方法では「"」を「\」に変換する問題を回避できます。
例:
このメソッドを使用しない場合は、次のように記述する必要があります:
リーリーカスタム分割文字列の目的: 生の文字列がどこで終わるかを識別します。