本文介绍了如何将字符串转换为正则表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 在正则表达式中使用任意 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); } 解决方案我不知道它是最聪明的或最高效的,但我使用类似如下: 命名空间{ 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 (* iter)){ result + ='\\'; result + = * iter; } return result; } 对于 wchar_t 我将修改 isMeta 以返回类似于: ; = 0&& ch meta 的初始化有点一个钻孔,确切的值取决于所使用的正则表达式(如果使用 boost :: regex ,甚至使用选项)。 What's the best way to escape an arbitrary std::wstring for use inside a regular expression? For example, convert you owe me $ to you owe me \$?My scenario: I want to use a std::tr1::wregex to search for a whole word. So I want to do something like: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);} 解决方案 I don't know that it's the cleverest or the most efficient, but I usesomething like the following:namespace {boolisMeta( char ch ){ static bool const meta[UCHAR_MAX] = { // ... }; return meta[static_cast<unsigned char>( ch )];}std::stringsanitizeForRegEx( 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;}For wchar_t, I'd modify isMeta to return something like:return ch >= 0 && ch < 128 && meta[ ch ];The initialization of meta is a bit of a bore, and the exact valuesdepend on the regular expressions used (or even the options ifboost::regex is used). 这篇关于如何将字符串转换为正则表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-28 20:05