ユーザが提供する文字列があるとします。あらゆる種類の文字を含めることができます。例としては、C++ 11/regex - 正確な文字列を検索する、エスケープ
std::string s1{"hello world");
std::string s1{".*");
std::string s1{"*{}97(}{.}}\\testing___just a --%#$%# literal%$#%^"};
...
今、私は<<
続く入力文字列s1
続い>>
の出現のためにいくつかのテキストで検索したいです。 s1
に特殊文字が含まれていなかった場合、これは正常に動作します
std::string input; // the input text
std::regex regex{">> " + s1 + " <<"};
if (std::regex_match(input, regex)) {
// add logic here
}
:このために、私は次のコードを持っています。しかし、s1
に正規表現エンジンで認識されるいくつかの特殊文字が含まれていても動作しません。
s1
にはどのようにしてstd::regex
がリテラルと見なされるので、s1
と解釈されませんか?言い換えれば、正規表現は次のようになります。
std::regex regex{">> " + ESCAPE(s1) + " <<"};
はstd
でESCAPE()
のような機能はありますか?
重要私は私の質問を単純化しました。私の実際のケースでは、正規表現ははるかに複雑です。 s1
が解釈されているという事実だけに悩まされているので、私はこれらの詳細を残しました。
正規表現を使用する特定の理由はありますか?これは 'string.find'で行うことができます –
なぜ入力文字列(' s1')を正規表現として使用していますか?おそらく 'std :: regex Regex {" >> * << "}};のようなものが良いでしょうか? – ForceBru
@Austin Brunkhorstはい、私の場合は正規表現が必要です。私は文字列がエンジンによって解釈されているという事実だけに苦しんでいるので、質問を簡略化しました。私の実際のケースでは、正規表現はより複雑です。 –