Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将字符串转换为正则表达式文字_C++_Regex_Tr1 - Fatal编程技术网

C++ 如何将字符串转换为正则表达式文字

C++ 如何将字符串转换为正则表达式文字,c++,regex,tr1,C++,Regex,Tr1,在正则表达式中使用任意std::wstring的最佳方法是什么?例如,将你欠我的钱$转换为你欠我的钱\$ 我的场景:我想使用std::tr1::wregex搜索整个单词。所以我想做一些类似的事情: std::wstring RegexEscape(const std::wstring& inp) { return ????? } bool ContainsWholeWord(const std::wstring& phrase, const std::wstring&a

在正则表达式中使用任意
std::wstring
的最佳方法是什么?例如,将
你欠我的钱$
转换为
你欠我的钱\$

我的场景:我想使用
std::tr1::wregex
搜索整个单词。所以我想做一些类似的事情:

std::wstring RegexEscape(const std::wstring& inp)
{
    return ?????
}

bool ContainsWholeWord(const std::wstring& phrase, const std::wstring& word)
{
    std::tr1::wregex regex(std::wstring(L"\\b") + RegexEscape(word) + L"\\b");
    return std::tr1::regex_match(phrase, regex);
}
return ch >= 0 && ch < 128 && meta[ ch ];

我不知道它是最聪明的还是最有效的,但我使用 如下所示:

namespace {
bool
isMeta( char ch )
{
    static bool const meta[UCHAR_MAX] =
    {
        // ...
    };
    return meta[static_cast<unsigned char>( ch )];
}

std::string
sanitizeForRegEx( std::string const& original )
{
    std::string result;
    for ( std::string::const_iterator iter = original.begin();
            iter != original.end();
            ++ iter ) {
        if ( isMeta( *iter ) ) {
            result += '\\';
        result += *iter;
    }
    return result;
}
meta
的初始化有点麻烦,精确的值 取决于所使用的正则表达式(如果需要,甚至取决于选项)
boost::使用regex

嗯,这很简单!只需使用正则表达式即可

std::wstring szTmp; // some string with $, (, ...
std::wregex rgx_Meta( LR"(([\^\$\\\.\*\+\?\(\)\[\]\{\}\|]))" );
std::wstring strEscaped( std::regex_replace( szTmp, rgx_Meta, LR"(\$1)" ) );

这将用“\$”替换所有特殊字符,如“$”。

好主意,但我们应该在代码中添加额外的斜杠,如下所示。std::wstring szTmp(L“x:\”);std::wregex rgx\u Meta(L“([\\\\\\\\$\.\*\\\\\\\+\?\(\)\[\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;std::wstring街道景观(std::正则表达式替换(szTmp,rgx\U Meta,L“\\$1”);