Буквальные символы в регулярных выражениях C++

Flappy

Всем привет, можно ли в std::regex сделать так, чтобы часть регулярки воспринималась буквально? Наподобие Pattern.quote() в java или escape() в C#. Или же надо самому надо менять все метасимволы?

1 ответ

Flappy

В регулярных выражениях не очень много управляющих символов, поэтому достаточно обычным образом экранировать символы:

[ ] \ / ^ $ . | ? * + ( ) { }

Делается это очень просто:

string escape( string s ) {
    std::regex re ( "[\\[\\]\\/^$.|?*+(){}]" );
    return std::regex_replace (s, re, "\\$0");
};

IDEone

На входе:

[]abc{}

на выходе:

\[\]abc\{\}

licensed under cc by-sa 3.0 with attribution.