Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可以使用(作为c+;+;)中的正则表达式;?_C++_Regex - Fatal编程技术网

C++ 可以使用(作为c+;+;)中的正则表达式;?

C++ 可以使用(作为c+;+;)中的正则表达式;?,c++,regex,C++,Regex,我正在尝试获取一个大文档的名称和密码(这是一个练习,没什么不好的:p) 我对名称使用正则表达式,如下所示 regex e ("\\ b (name) ([^] *)"); 问题来自于键,因为它们紧跟在a之后(如果我做了regex p(“\\b(()([^]*)”)),它在初始化的内存中给了我一个错误,它可能没有很好地初始化,但我找不到关于特定字符的任何信息,例如( fo示例文档: 名称图灵 PASS(31)正如其他人在评论中指出的,如果你想与它们匹配,就需要跳出括号。但是,注意,有两种逃避机制

我正在尝试获取一个大文档的名称和密码(这是一个练习,没什么不好的:p)

我对名称使用正则表达式,如下所示

regex e ("\\ b (name) ([^] *)");
问题来自于键,因为它们紧跟在a之后(如果我做了
regex p(“\\b(()([^]*)”)
),它在初始化的内存中给了我一个错误,它可能没有很好地初始化,但我找不到关于特定字符的任何信息,例如(

fo示例文档:

名称图灵
PASS(31)

正如其他人在评论中指出的,如果你想与它们匹配,就需要跳出括号。但是,注意,有两种逃避机制:ReEX引擎和C++字符串文字的机制。

因此,例如,正则表达式引擎可能会期望如下所示:

\(name\) \(\d+\)
这里括号
()
被转义,这样正则表达式引擎就不会使用它们进行分组。因此,上面的正则表达式与
(name)(123)
匹配

<>现在,写一个C++字符串文字,你需要特别地避开反斜杠,这样你就可以写< /P>
std::regex e("\\(name\\) \\(\\d+\\)");
如果要避免这些讨厌的
\\
,还可以使用原始字符串文字:

此处,前缀“R”表示您编写了原始字符串文字。
X(
)X
是任意分隔符。(有关此问题或各种SO问题的更多信息。)



顺便说一句,注意正则表达式中的空格。您编写了
[^]*
,它匹配一个任意字符后跟任意数量的空格。这可能不是您的意思。

在正则表达式中,您必须使用反斜杠转义所有具有特殊意义的字符。
\
,和
(标记组的开头。总计达@ T.NIESE的评论提醒,C++字符串中的反斜杠也必须被转义(但看起来您已经知道了)。谢谢回答@ .T.NIEES和我使用它,但您能给我举个例子吗?您可能想为此使用原始字符串文字。
std::regex e(R"X(\(name\) \(\d+\))X");
                 ~~~~~~~~~~~~~~~~