PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reguläre Ausdrücke mit wxWidgets (wxRegEx)


Gast
2006-01-05, 21:41:32
Moin!

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. Das ist korrekt, testen kann man das z.B. hier (http://www.personeel.unimaas.nl/H.Schotel/Testaregex/).
Trotz korrekter Eingabe wie z.B. "1" gibt er kein "beh." aus. Für Vorschläge wäre ich sehr dankbar.

Xmas
2006-01-06, 14:27:56
'\' in einem String leitet eine Escape-Sequenz ein mit der man Sonderzeichen darstellen kann (wie eben Newline: '\n'). Wenn du tatsächlich ein Backslash im String haben willst, musst du es verdoppeln. '\d' ist keine definierte Escape-Sequenz und wird deshalb wahrscheinlich als 'd' interpretiert.
Korrekt müsste deine RegEx also so aussehen:
"\\d{1,5}[- ]\\d{1,7}[- ]\\d{1,6}[- ](\\d|X)$"

Und wozu '{1}'?

Gast
2006-01-06, 16:52:45
Korrekt müsste deine RegEx also so aussehen:
"\\d{1,5}[- ]\\d{1,7}[- ]\\d{1,6}[- ](\\d|X)$"
Stimmt - nimmt er aber nicht. Nichtmal "\\d" alleine funktioniert. Ich habe es mit "[0-9]" probiert, das nimmt er an.

Und wozu '{1}'?
Stimmt... :D