Seite 1 von 1
[QRegExp] Keine Whitespaces am Ende der Zeile erkannt
Verfasst: 27. Juli 2007 14:28
von DarkWotan
Hallo,
kann es sein, dass die RegExp-Engine von Qt (getestet: 4.3.0) keine Whitespaces am Ende der Zeile findet?
In folgendem Text wird mit
keine Whitespaces am Ende der Zeile gefunden.
Code: Alles auswählen
#include <iostream>
int main()
{
using namespace std;
cout << "Hallo Welt!" << endl;
return 0;
}
Woran liegt das? Das verwendete QRegExp-Objekt ist via
erzeugt worden und nicht weiter parametrisiert.
MfG, Cedric
Verfasst: 27. Juli 2007 17:50
von upsala
Interessanter Beispielcode... QRegExp kann auf jeden Fall Leerzeichen am Ende eines String mit deiner RegEx finden...
Verfasst: 31. Juli 2007 11:45
von Zandru
schreib mal einen kompletten Beispielcode rein. Könnte es sein, dass du vergessen hast \ durch \\ zu ersetzen?
QRegExp("\s+$") geht jedenfalls schief - das \ wird von C "gefressen".
Verfasst: 1. August 2007 11:14
von DarkWotan
Zandru hat geschrieben:schreib mal einen kompletten Beispielcode rein. Könnte es sein, dass du vergessen hast \ durch \\ zu ersetzen?
QRegExp("\s+$") geht jedenfalls schief - das \ wird von C "gefressen".
Daran liegt es definitiv nicht. Ich gebe die RegExp über ein QLineEdit ein, das nimmt das das Escapen schon automagisch vor bzw. macht es unnötig. Außerdem habe ich diese Expressions schon mit anderen, ähnlichen Texten probiert, da hat es funktioniert.
MfG, Cedric
Verfasst: 1. August 2007 12:39
von upsala
Wo bleibt der Beispielcode?
Verfasst: 1. August 2007 13:21
von DarkWotan
upsala hat geschrieben:Wo bleibt der Beispielcode?
Code: Alles auswählen
#include <cstdio>
#include <QtCore>
int main()
{
QTextStream out(stdout);
QString source =
"#include <iostream> \n"
"\n"
"int main() \n"
"{ \n"
" using namespace std; \n"
" \n"
" cout << "Hallo Welt!" << endl;\n"
" \n"
" return 0; \n"
"} \n";
QRegExp re;
re.setPattern("\\s+$");
out << "Found " << source.count(re) << " times." << endl;
return 0;
}
Verfasst: 1. August 2007 15:44
von bst
Hi,
QRegExp kennt keinen Multiline-Modus, d.h. das $ matched nur am Ende des gesamten Strings, nicht auch innerhalb des Strings bei einem Zeilenwechsel.
D.h. Du hast hier nur einen einzigen Match " \n".
Nimm einfach mal einen Replace, dann siehst Du das selber.
Count zählt - wozu das auch immer gut sein soll ? - 'überlappende' Matches, liefert hier also zwei. M.E. (ungetestet) einmal " \n$" und einmal "\n$". Mit einem:
liefert count dementsprechend nur noch 1 zurück.
cu, Bernd
Verfasst: 1. August 2007 16:10
von DarkWotan
Interessant. D. h. entweder ich bastele mir ein Workaround speziell für meinen Anwendungsfall oder ich leite eine Klasse MultilineRegExp von QRegExp ab und überschreibe ein paar Methoden, wobei letzteres sich wegen fehlender virtuellen Methoden für QString::find() gar nicht lohnen würde.
MfG, Cedric