0

我在文件中有一个部分:

[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]...等等。

谢谢,

4

2 回答 2

2

您的代码至少有两个问题。首先,您提供的正则表达式包含文字 string "Sources",而不是"Source"您似乎要匹配的 not 。第二个是boost::regex_match绑定的:它必须匹配整个字符串。你似乎想要的是boost::regex_search. 但是,根据您正在执行的操作,尝试匹配整个字符串可能会更好: "\\[Source(?:\\.(\\w+))?\\]\\s*". 它提供了尾随部分(如果存在)的捕获(但不是前导部分 "Source"——一般来说,在捕获常量时没有意义)。

还要注意,这个序列".*?"非常可疑。'*'通常,如果 a (非转义)后跟 a ,我希望正则表达式解析器失败'?'

于 2013-06-17T13:59:42.807 回答
1

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

您的选择是使用boost::regex_search,它将搜索与您的正则表达式匹配的输入的子字符串,或者修改您的正则表达式以接受传入的整个字符串。

于 2013-06-17T13:50:42.930 回答