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

it is possible to use ( as a regular expression in c++?

本文关键字:正则表达式 c++ 作为 可以使      更新时间:2023-10-16

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

我使用正则表达式命名,如下

regex e ("\ b (name) ([^] *)");

问题是密钥,因为它们紧跟在a之后(如果我执行regex p ("\ b (() ([^] *)"),它会在初始化的内存中给我一个错误,它可能初始化得不好,但我没有发现任何关于特定字符的信息,比如(

例如DOC:

name图灵通过(31)<-我不能接受这个31

问候!

正如其他人在评论中指出的那样,如果你想与括号匹配,你需要转义括号。但是,请注意,有两种转义机制:正则表达式引擎的转义机制和C++字符串文字的转义机制。

例如,正则表达式引擎可能会期望这样的东西:

(name) (d+)

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

现在要编写C++字符串文字,您需要转义(特别是)反斜杠。这样你就可以写

std::regex e("\(name\) \(\d+\)");

如果你想避免这些讨厌的\,你也可以使用原始字符串文字:

std::regex e(R"X((name) (d+))X");
~~~~~~~~~~~~~~~~

这里的前缀"R"表示您编写了一个原始字符串文字。X()X是任意的分隔符。(关于此的更多信息,请访问https://en.cppreference.com/w/cpp/language/string_literal或各种SO问题。)


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