给出了LogString的这一部分:
... HTTP / 1.1“206 391402” - “”AppleCoreMedia / 1.0.0.8B117(iPod; U; CPU OS 4_1与Mac OS X一样; de_DE这个)“
我需要匹配括号内的最后一个子串来从字符串中获取远程系统信息。
我不是真正的正则表达式,但根据我的理解,我必须逃避括号,如“\(
”和“\)
”。
现在要匹配整个字符串我认为我必须这样做:
带有匹配任何内容的点的 \(\.*\)
和用于指定随机点数的“*
”。
但它不起作用。正如您所期望的那样(\.*)
或(.*)
。
打开和关闭括号时一定有问题,因为在尝试以这种方式匹配字符串时出现Seg Fault。
有人可以帮我吗?
答案 0 :(得分:1)
很抱歉打扰你。这就是诀窍:
boost::regex f_sourceDir(conf.pString("filter_SourceFiles")),
f_string(conf.pString("filter_String")),
m_first(conf.pString("field0")),
m_second("\\(([^)]+)\\)\"$",boost::regex::perl),
m_third(conf.pString("field2")),
m_fourth(conf.pString("field3"));
解析配置似乎有问题,它无法处理这样的字符串。我想我必须改变Config类......
无论如何,谢谢!答案 1 :(得分:0)
试试这个
\(.*\)
您只需要转义括号,而不是.
。如果你逃离.
,那么你将匹配一个文字点,这将无法找到。
如果您不想使用括号,则此处是使用捕获组的解决方案
\((.*)\)
您可以在捕获组1中找到括号内的部分。
答案 2 :(得分:0)
以防万一,有两种方法可以处理带有正则表达式的字符串:匹配和搜索。匹配要么匹配整个字符串要么失败,搜索不必匹配整个字符串。你正在做的是搜索。
使用Perl语法(boost :: regex让你选择语法)所需的表达式如下:
\(([^)]+)\)"$
那就是:在括号内找到一个或多个非右括号符号的子串,后跟跟踪“和字符串的结尾。
在C ++中,你需要引用这个表达式:
boost::regex re("\\(([^)]+)\\)\"$", boost::regex::perl);