2015-05-14 43 views
0

我使用下面的代码为“执行”,在MFC下的正则表达式++如何逃避整个字符序列?

std::wregex rx(regularExpression,nFlags); 
std::wcmatch res; 
std::regex_search(inputString, res, rx); 

这在一个对话框中使用,其中在regularExpression用户类型和我在inputString搜索。

用户可能不希望使用正则表达式来找到他想要的东西,在这种情况下,我提供了一个选项“全字”,它将与regularExpression变量中的任何字符相匹配。

“整词”是通过在<>封闭regularExpression做,有没有其他的特殊字符,这将使regex_search方法忽略了每一个正则表达式的特殊字符,从字面上对待他们,由<>封闭?

+0

你在问什么不清楚。感觉就像你已经包含了太多对你的问题不重要的细节,并没有足够的细节。 – mah

+1

原始字符串文字可能会有所帮助:http://stackoverflow.com/a/24533511/1413395 –

+0

只需分别替换任何特殊字符,首先用'\\'替换'',然后用'\ .'替换'.'。 , 等等。 – wimh

回答

2

那么我怎么能逃避整个字符串,而不必逃避每一个特殊字符?

C++正则表达式不支持任何方式来做到这一点。如果要将用户的字符串传递给正则表达式匹配器,则必须转义每个特殊字符。

在一些正则表达式引擎中有多种模式,其中一种模式默认处理特殊字符并转义它们导致它们的字面行为,另一种模式默认字面行为,必须转义以便特别行为。但是,C++正则表达式不支持。

+0

我可以连接该字符串中的变量吗?如果regularExpression是CString,regularExpression.Format(R“delimeter(%s)delimeter”,regularExpression)? – Robson

+1

原始字符串文字的原始讨论不适用于用户输入的字符串,只适用于您在源代码中编写的字符串文字。 – bames53