我在文件中有一个部分:
[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] ......等等。
谢谢,
答案 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
,要搜索与正则表达式匹配的输入的子字符串,要么修改正则表达式以接受传入的整个字符串。