我正在尝试使用C ++库来使用正则表达式。
bool x = std::regex_match(cInputLayoutRec->InputString, std::regex("^[A-Z0-9-\'// ]*$"));
在这种情况下,如果提供的输入是这些字母中的任何一个,结果应为true(x) A到Z,0-9,\,'和/
它适用于除\之外的所有条件,即如果输入字符串包含\,则结果为false。 我尝试使用/ \来迎合这个特殊字符'\',即使它不起作用 如果我遗失了什么,有人可以提出一些意见吗?
提前致谢!
答案 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-\\'// ]*$
。此字符串将传递给正则表达式解析器。请注意,两个序列\\
已被\
“替换”。
正则表达式解析器将\\
序列解释为字符类中的文字\
字符。