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

时间:2013-06-17 13:42:29

标签: 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.Ia32] ......等等。

谢谢,

2 个答案:

答案 0 :(得分:2)

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

另请注意,序列".*?"非常可疑。一般, 我希望正则表达式解析器失败 a(非转义)'*'后跟'?'

答案 1 :(得分:1)

问题是,如果整个输入字符串与正则表达式匹配,boost::regex_match仅返回true。所以'['和']'与你当前的正则表达式不匹配,它会失败。

您的选项要么使用boost::regex_search,要搜索与正则表达式匹配的输入的子字符串,要么修改正则表达式以接受传入的整个字符串。