假设您有一个由用户提供的字符串。它可以包含任何种类的角色。例子有:C++ 11 /正则表达式 - 搜索确切的字符串,转义
std::string s1{"hello world");
std::string s1{".*");
std::string s1{"*{}97(}{.}}\\testing___just a --%#$%# literal%$#%^"};
...
现在我想在一些文本的>>
发生之后输入的字符串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) + " <<"};
有没有像在std
ESCAPE()
的功能?
重要我简化了我的问题。在我的真实情况下,正则表达式要复杂得多。由于我只是在解释s1
这个事实上遇到麻烦,所以我将这些细节留下了。
是否有使用正则表达式的特殊原因?这可以通过'string.find'来完成 –
为什么你使用_the input string_('s1')作为正则表达式?也许像'std :: regex正则表达式{“>> * <<”};'会更好? – ForceBru
@Austin Brunkhorst是的,我需要正则表达式。我简化了这个问题,因为我只是在引擎解释字符串的事实上挣扎着。在我的真实情况下,正则表达式更复杂。 –