2016-02-12 343 views
2

我需要支持多行的模式。该模式取自用户,他们能够将多行字符串包含为正则表达式模式。C++中的多行正则表达式模式

例如:

std::regex re("^"+CWD+"("+path_delim+"[\\s\\S]*|$)"); 
if(std::regex_search(file,re)){ 
    //do something 
} 

CWD的变量可以是多行字符串。

P.S:如果我可以只用std::regex来处理这个问题,那就好了,即如果它不是轻量级的,我不想使用任何库。此外,它需要是c++11

+2

当你说'CWD'是一个*多行字符串*你是什么意思?它需要使用正则表达式语法。 – Galik

+0

你希望'^'和'$'匹配*行*的末尾还是字符串的末尾? – Will

+0

@将结束字符串。 – Jahid

回答

0

似乎多线正则表达式模式已经被支持。我只需要在将变量传递给正则表达式构造函数之前对变量进行清理。这是我使用的消毒字符串构造有效的正则表达式的代码:

String sanitizeRegexString(const String& s){ 
    std::regex re(R"([\s\S])"); 
    return std::regex_replace (s,re,"[$&]",std::regex_constants::format_default); 
} 

上述功能将一个字符串与[]因此字符串不被解释为一个正则表达式回绕到它的所有字符,而它被视为模式内部的固定字符串,而与其连接的其他字符串(没有消毒)充当正则表达式模式。