我在文件中有一段:
[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/