正则表达式 - 请教一个 c++11的 正则语法
怪我咯
怪我咯 2017-04-17 15:25:28
0
3
582

R"xxx()xxx": xxx可以被替换成任何字符串,不可以包含括号和双引号,而且你需要保证两边是一样的。如果你这样写,那么括号里面的任何字符都不会被转义,甚至是换行符也没有问题。这种字符串语法用来写正则表达式就特别的方便。

可以详细说下用法吗, 感觉不是很理解.

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(3)
阿神

あなたが理解できないのかRしないのかxxxは分かりませんので、すべてお話します

まずは RRaw String を表す

から始めましょう。

たとえば、次のテキスト

リーリー

Raw Stringが登場する前は、次のように記述する必要がありました

リーリー

文字列内の特殊記号はエスケープする必要があります

しかし、Raw String を持った後は、次のように書くことができます

リーリー

つまり、括弧 Raw String 内のテキストは 表示されている内容が取得されるものです

おそらく、なぜ括弧が必要なのか疑問に思っているかもしれません。

テキストについて考える

リーリー

括弧がない場合は R"abc"efg" と記述されるため、どちらが対になっている二重引用符
であるかを判断することができないため、

括弧を導入した後、原文に引用符 + 括弧があった場合はどうすればよいでしょうか? たとえば
リーリー

上記の書き方によれば、

と書く必要があり、これでは明らかに文法ミスが発生し、どのペアが R"(abc)"efg)")"
であるか判断できなくなります。テキストに が含まれていますが、 )" では () を区切るのに十分ではありません

したがって、 (区切り文字) delimiter をカスタマイズする必要があります。これは、質問の です。xxx(...)xxx の上の文字列は、
および R"xxx(abc)"efg)xxx" として記述できます。プログラマは、
に含まれるすべてがオリジナルのテキストであることがわかります。 もちろん、xxx(...)xxx をカスタマイズすることもできます。
と記述することもできます。

いいねを押す +0
巴扎黑

これは C++11 の生の文字列リテラルです

リーリー

出力

リーリー

つまり、括弧内の単語はエスケープされず、そのまま出力されます。
正規表現では「"」が頻繁に使用されるため、この方法では「"」を「\」に変換する問題を回避できます。
例:

リーリー

このメソッドを使用しない場合は、次のように記述する必要があります:

リーリー
いいねを押す +0
阿神

カスタム分割文字列の目的: 生の文字列がどこで終わるかを識別します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート