2016-11-18 247 views
3

我有一点C++ 11 RegEx的问题,我认为它是关于贪婪。C++ 11正则表达式,非贪婪

这是一个小样本。

#include <stdio.h> 
#include <string> 
#include <regex> 

int main (void) 
{ 
    std::string in="{ab}{cd}[ef]{gh}[ij][kl]"; // the input-string 

    std::regex rx1 ("(\\{.+?})(.*)", std::regex::extended);  // non-greedy? 
    std::smatch match; 

    if (regex_match (in, match, rx1)) 
    { 
    printf ("\n%s\n", match.str(1).c_str()); 
    } 

    return 0; 
} 

我希望

{ab} 

输出。 但我得到

{ab}{cd}[ef]{gh} 

我期望的结果我得到的,如果我贪心,但不与做呢?之后。+。 应该让它不贪心吧?

那么,我的想法是什么问题? 感谢您的帮助!

克里斯

+0

为什么你逃跑用'\\ {'但是你不要逃右大括号的大括号? – Bobulous

+0

@Bobulous这是一个正则表达式的特殊字符,它有助于重复以前的模式。 –

+1

我认为你不应该使用'std :: regex :: extended',它使你的正则表达式符合POSIX ERE,不支持懒惰量词。 –

回答