0

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

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

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

它适用于除 \ 之外的所有条件,即如果输入字符串包含 \ 这将导致错误。我尝试使用 /\ 来满足这个特殊字符 '\' 的需求,即使这样它也不起作用。
如果我遗漏了什么,任何人都可以提出一些建议吗?

提前致谢!

4

3 回答 3

2

其他答案是正确的,但由于您使用的是 C++11,因此应该注意您也可以使用原始字符串文字,如下所示:

std::regex(R"(^[A-Z0-9-\\'// ]*$)")
于 2013-08-23T09:02:11.343 回答
1

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

您需要在字符串中使用 a \\\

由于反斜杠也是正则表达式的转义字符,因此您必须再次对其进行转义,因此用于\\\\表示\正则表达式中的字符。

于 2013-08-23T08:52:31.863 回答
0

该角色几乎\用于到处逃跑。这个“无处不在”包括 C++ 字符串文字语法正则表达式语法。

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

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

这就是发生的事情:

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

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

于 2013-08-23T08:57:34.993 回答