转义任意 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/