用c ++接受“\”的正则表达式

时间:2013-08-23 08:50:38

标签: c++ regex regex-negation

我正在尝试使用C ++库来使用正则表达式。

bool x =   std::regex_match(cInputLayoutRec->InputString, std::regex("^[A-Z0-9-\'// ]*$"));

在这种情况下,如果提供的输入是这些字母中的任何一个,结果应为true(x) A到Z,0-9,\,'和/

它适用于除\之外的所有条件,即如果输入字符串包含\,则结果为false。 我尝试使用/ \来迎合这个特殊字符'\',即使它不起作用 如果我遗失了什么,有人可以提出一些意见吗?

提前致谢!

3 个答案:

答案 0 :(得分:2)

其他答案是正确的,但由于您使用的是C ++ 11,因此应注意您也可以使用raw string literals,如下所示:

std::regex(R"(^[A-Z0-9-\\'// ]*$)")

答案 1 :(得分:1)

您在字符串中使用\,因此它将被视为字符串转义序列(在您的情况下转义为'

您需要使用\\在字符串中包含\

由于反斜杠也是正则表达式的转义字符,因此您必须再次转义它,因此请使用\\\\来表示正则表达式中的\字符。

答案 2 :(得分:0)

\字符几乎用于转义。这个“无处不在”包括C ++字符串文字语法正则表达式语法。

C ++中的正则表达式定义应该是:

std::regex("^[A-Z0-9-\\\\'// ]*$") 

这就是:

  • C ++解析器将字符串文字 "^[A-Z0-9-\\\\'// ]*$"解释为包含以下内容的字符串:^[A-Z0-9-\\'// ]*$。此字符串将传递给正则表达式解析器。请注意,两个序列\\已被\“替换”。

  • 正则表达式解析器将\\序列解释为字符类中的文字\字符。