Regex escapen
-
Hallo,
gibt es eine Möglichkeit mit std::regex einen std::string anzugeben, der auch Regex Steuerzeichen, wie * enthält, die aber ignoriert werden.
Ich will eben nicht extra \* schreiben.
Gruß
-
Wie sollte dann ein Kleene-Stern angegeben werden können?
std::regex erlaubt eine Reihe verschiedener Regex-Syntaxen -- POSIX, extended POSIX, awk, grep, egrep und ECMAscript. Du kannst dir davon aussuchen, welche dir am besten gefällt, aber der Stern ist in allen ein Steuerzeichen.
-
seldon schrieb:
Wie sollte dann ein Kleene-Stern angegeben werden können?
std::regex erlaubt eine Reihe verschiedener Regex-Syntaxen -- POSIX, extended POSIX, awk, grep, egrep und ECMAscript. Du kannst dir davon aussuchen, welche dir am besten gefällt, aber der Stern ist in allen ein Steuerzeichen.
Ja, eben. Deshalb gibt es in C# auch die Methode Escape(), die eine Zeichenkette automatisch escaped, d.h. den Steuerzeichen ein \\ anstellt.
Und genau diese Funktionalität brauche ich. Offensichtlich bietet regex_constants kein Flag an. Gibt es eventuell eine Methode im Standard?
-
Ersetz das * doch durch ein Zeichen, welches definitiv nicht vorkommt.
#include <iostream> #include <string> void Escape(std::string& str) { for (std::size_t i = 0; i < str.length(); ++i) if (str[i] == '*') str[i] = 1; } void Unescape(std::string& str) { for (std::size_t i = 0; i < str.length(); ++i) if (str[i] == 1) str[i] = '*'; } int main() { std::string s = "(.*)..."; Escape(s); std::cout << s << std::endl; Unescape(s); std::cout << s << std::endl; return 0; }Vielleicht nicht schön, aber könnte je nach Anwendungsfall ausreichen.