FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

Reguläre Ausdrücke mit wxWidgets (wxRegEx)

Reguläre Ausdrücke mit wxWidgets (wxRegEx) 2006-01-04 21:32
Anonymer User
Irgendwas mache ich falsch, nur weiß ich nicht, was.

void Medium::setISBN(std::string isbn) { //wxRegEx *reIsbn = new wxRegEx("\d{1,5}[- ]\d{1,7}[- ]\d{1,6}[- ](\d|X){1}$"); wxRegEx *reIsbn = new wxRegEx("\d"); if (reIsbn->Matches(isbn.c_str())) { std::cout << "beh.\n"; // ...
Der auskommentierte Ausruck kommt erstmal nicht zur Verwendung, obwohl er an sich stimmt. Mit "\d" wird eine Ziffer erwartet. Trotz korrekter Eingabe gibt er kein "beh" aus. Für Vorschläge wäre ich sehr dankbar.

Gerri

Re: Reguläre Ausdrücke mit wxWidgets (wxRegEx) 2006-01-04 21:34
tekai
zugegebener maßen kenne ich mich mit wxRegEx nicht aus, aber oft ist es so das man doppel so viele \ wie normal braucht.

Re: Reguläre Ausdrücke mit wxWidgets (wxRegEx) 2006-01-04 21:38
Anonymer User
Das Problem ist meiner Einschätzung nach nicht der reguläre Ausdruck. "\d" erwartet nur eine Ziffer, testen kann man das z.B. hier.

Der Fehler liegt also irgendwie im Umgang mit der Klasse wxRegEx und der Referenz oder so. Nur wo?

Gerri

Re: Reguläre Ausdrücke mit wxWidgets (wxRegEx) 2006-01-04 22:26
UncleOwen
Nein, der Fehler liegt, wie tekai schon sagte, darin, dass '\' innerhalb eines C-Strings ein Escape-Zeichen ist.

Re: Reguläre Ausdrücke mit wxWidgets (wxRegEx) 2006-01-04 23:29
Anonymer User
Okay, ihr habt Recht. "[a-z]" funktioniert - aber "\\d" funktioniert nicht. Und jetzt sagt mir nicht, ich solle es mit drei Backslashes versuchen! [img]http://www.fb18.de/gfx/25.gif[/img] Also?

Re: Reguläre Ausdrücke mit wxWidgets (wxRegEx) 2006-01-05 11:22
Anonymer User
Wenn du einen Backslash brauchst: "\\"
Für zwei Backslashs: "\\\\".
Wenn du noch mehr wissen willst:
http://www.dinkumware.com/manuals/reader.aspx?b=p/&h=charset.html
(Auf die Füße klicken, dann wirst du weiter geleitet.)

Re: Reguläre Ausdrücke mit wxWidgets (wxRegEx) 2006-01-07 05:15
georg
Ja, den Stringliteral-Regeln von C++ zufolge muss es
\\d heißen, wenn der String \ und d enthalten soll.
Aber wenn \\d nicht geht, vermute ich, dass es an der
Implementatin der regulären Ausdrücke liegt. \d kommt,
wenn ich mich richtig erinnere, von Perl und wird deshalb
von einfachen oder alten RegExp-Interpretern nicht
verstanden. Alternativ kannst du ja [0-9] statt \d
nehmen.

Edit:
Lass also einfach ein "s/\\\\d/[0-9]/g;" über den Code laufen [img]http://www.fb18.de/gfx/15.gif[/img]