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

标签 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& word)
{
    std::tr1::wregex regex(std::wstring(L"\\b") + RegexEscape(word) + L"\\b");
    return std::tr1::regex_match(phrase, regex);
}

最佳答案

我不知道它是最聪明的还是最有效的,但我使用 类似于以下内容:

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;
}

对于 wchar_t,我将修改 isMeta 以返回如下内容:

return ch >= 0 && ch < 128 && meta[ ch ];

meta 的初始化有点无聊,具体值 取决于所使用的正则表达式(甚至是选项,如果 boost::regex 被使用)。

关于c++ - 如何将字符串转换为正则表达式文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846510/

相关文章:

c++ - 使用 reverse_iterator 而不是 const_reverse_iterator 并得到讨厌的编译器警告和错误

Python 正则表达式 : Group Backref

PHP preg_match 只允许数字、空格 '+' 和 '-'

C++正则表达式匹配没有标点符号的单词

c++ - 使用可以在多个不同位置定义的函数之类的 C++ 类

c++ - boost-1.55.0 未定义对 `boost::thread::join() 的引用,即使在链接到正确的库之后

c++ - 虚拟方法和静态/动态分配

python - 将 re.findall 创建的列表拆分为单个单词,然后计算每个单词的出现次数,按出现次数降序排列

c++ - 如何在 Visual Studio 2010 中使用 tr1 (tr1::function)?

c++ - 如何从 Catch 记者中排除 printf 消息