假设用户提供了一个字符串,它可以包含任何类型的字符。例如:
std::string s1{"hello world");
std::string s1{".*");
std::string s1{"*{}97(}{.}}\\testing___just a --%#$%# literal%$#%^"};
...
现在我想在一些文本中搜索出现 >>
紧接着输入字符串 s1
后面再紧跟着 <<
的情况。为此,我有以下代码:
现在我希望搜索文本中是否存在>>
后面紧跟着输入字符串s1
,然后再紧跟着<<
的部分内容。为此,我编写了以下代码:
std::string input; // the input text
std::regex regex{">> " + s1 + " <<"};
if (std::regex_match(input, regex)) {
// add logic here
}
如果s1
中不含任何特殊字符,这段代码运行得很好。然而,如果s1
包含了一些被正则表达式引擎识别的特殊字符,它就无法工作。
我该如何转义s1
,以使std::regex
将其视为字面值,从而不解释s1
?换句话说,正则表达式应该是:
std::regex regex{">> " + ESCAPE(s1) + " <<"};
在标准库中是否有类似于ESCAPE()
的函数?
重要提示:我简化了我的问题。在实际情况中,正则表达式要复杂得多。由于我只遇到了s1
被解释的问题,所以我省略了这些细节。
string.find
完成。 - Austin Brunkhorsts1
和一些文本。字符串s1
用于动态构建正则表达式,该表达式用于在输入文本中进行搜索。 - Karel Demeesterstd::regex regex{">> (.*?) <<"}; ... if(match.str(1) == s1)...
这种方法在你的情况下可行吗? - Galik