0

私は C++ で作業しています。xml ファイルから正規表現を取得しています。そして、この正規表現を長い文字列で検索する必要があります。たとえば、私の正規表現は次のとおりです。".+myFunction"

したがって、この正規表現をxmlファイルに入れる必要がある場合は、上記の正規表現の前にbackslach文字を使用する必要があります. すなわち'\''.'"\.+myFunction"

今、boost::regex_search()関数を使用して正規表現を検索しています。ただし、バックスラッシュ文字が追加されているため、関数は false を返します。

では、関数の使用中にバックスラッシュ文字を無視する方法はboost::regex_search()??

サンプルコードは次のとおりです。

string longString  = "hdh::dfjdj::dfuhgj::myFunction.devide.and"
string regularExp = "\.+myFunction"
const boost::regex searchPattern(regularExp);
if(boost::regex_search(longString, searchPattern))
{
    cout <<"Regular expresssion is found" << std::endl;
}
4

1 に答える 1

0

あなたが求めていることはあまり明確ではありません:

  • XML では、`".+myFunction" はそのままで完全に合法です。

  • その正確なシーケンスに一致させようとしている場合は、バックスラッシュを 2 回エスケープする必要があります。1 回目は文字列リテラルで特別な意味を持つため、2 回目は正規表現で特別な意味を持つためです。探しているものの一部である場合は、引用符もエスケープする必要があります"\"\\\\.+myFunction\""。ただし、正確なシーケンスに一致させようとしている場合は、正規表現は必要ありませんstd::search。ほとんどの場合、正規表現で十分です。

  • 改行以外の 1 つ以上の文字のシーケンスに一致する正規表現を定義しようとしている場合、正規表現"myFunction"を初期化するための文字列リテラルは になります".+myFunction"

于 2012-08-13T14:38:08.703 に答える