c++ - 如何在boost中定义正则表达式?

标签 c++ visual-c++ boost boost-regex

我在文件中有一段:

[Source]

[Source.Ia32]


[Source.Ia64]

我将表达式创建为:

const boost::regex source_line_pattern ("(Sources)(.*?)");

现在,我正在尝试匹配字符串,但我无法匹配;它总是返回 0。

if (boost::regex_match ( sToken, source_line_pattern ) )
  return TRUE;

请注意 sToken 值为 [Source]。 [Source.Ia32]...等等。

谢谢,

最佳答案

您的代码至少有两个问题。首先, 您提供的正则表达式包含文字字符串 "Sources",而不是 "Source",这就是你看起来的样子 试图匹配。第二个是 boost::regex_match 是 bound:它必须匹配整个字符串。你似乎想要什么 是 boost::regex_search。取决于你在做什么, 但是,尝试匹配整个字符串可能会更好: “\\[来源(?:\\.(\\w+))?\\]\\s*”。它提供了捕获 尾随部分,如果存在(但不是前导 "Source"---一般来说,捕捉某些东西是没有意义的 一个常数)。

还要注意序列 ".*?" 非常可疑。通常情况下, 我希望正则表达式解析器在以下情况下失败 一个(非转义)'*' 后跟一个 '?'

关于c++ - 如何在boost中定义正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17149026/

相关文章:

c++ - 在 Visual Studio 中创建静态/动态 C++ 库时出现问题

c++ - 我是否需要在多线程环境中保护对 STL 容器的读取访问?

c++ - (不)在异常中使用 std::string

c++ - 如何查询一个框是否在rtree中

c++ - 在对象是静态的类函数中声明静态变量是否有意义

c++ - 如何获得数组中偶数元素的奇数和乘法

c++ - 使用 openssl c/c++ API 解密失败

c++ - "lib"头的库文件名在codeblocks和vs9编译器中无法识别

c++ - SDL 中的 F12 键导致断点?

boost DFS back_edge