可以使用(作为c++中的正则表达式
it is possible to use ( as a regular expression in c++?
我正在尝试获取一个大文档的名称和密码(这是一个练习,没什么不好的: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问题。)
顺便说一句,注意正则表达式中的空格。您编写了[^] *
,它匹配一个任意字符和任意数量的空格。这可能不是你的意思。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 在C++中实现正则表达式
- C++正则表达式替换整个单词
- 用C++编写正则表达式的正确方法是什么?
- 如何从Stroustrup的C++书中解释这个正则表达式?
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- C++:匹配正则表达式,什么是匹配?
- C++:正则表达式匹配代码,打印多个匹配项?