提升:regex_search - 括号内的匹配字符串

时间:2011-07-20 20:47:31

标签: c++ regex boost

给出了LogString的这一部分:

  

... HTTP / 1.1“206 391402” - “”AppleCoreMedia / 1.0.0.8B117(iPod; U; CPU   OS 4_1与Mac OS X一样; de_DE这个)“

我需要匹配括号内的最后一个子串来从字符串中获取远程系统信息。

我不是真正的正则表达式,但根据我的理解,我必须逃避括号,如“\(”和“\)”。

现在要匹配整个字符串我认为我必须这样做:

带有匹配任何内容的点的

\(\.*\)和用于指定随机点数的“*”。

但它不起作用。正如您所期望的那样(\.*)(.*)

打开和关闭括号时一定有问题,因为在尝试以这种方式匹配字符串时出现Seg Fault。

有人可以帮我吗?

3 个答案:

答案 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)

试试这个

\(.*\)

here on Regexr

您只需要转义括号,而不是.。如果你逃离.,那么你将匹配一个文字点,这将无法找到。

如果您不想使用括号,则此处是使用捕获组的解决方案

 \((.*)\)

here on Regexr

您可以在捕获组1中找到括号内的部分。

答案 2 :(得分:0)

以防万一,有两种方法可以处理带有正则表达式的字符串:匹配和搜索。匹配要么匹配整个字符串要么失败,搜索不必匹配整个字符串。你正在做的是搜索。

使用Perl语法(boost :: regex让你选择语法)所需的表达式如下:

\(([^)]+)\)"$

那就是:在括号内找到一个或多个非右括号符号的子串,后跟跟踪“和字符串的结尾。

在C ++中,你需要引用这个表达式:

boost::regex re("\\(([^)]+)\\)\"$", boost::regex::perl);