Seite 1 von 2

QRegExp invertieren

Verfasst: 22. Mai 2007 13:00
von BartSimpson
Hallo, ich habe diesen Ausruck :QRegExp("d4.dll$"), nur soll er sich genau anders rum verhalten.(Alles liefern was nicht dem entspricht)
Hat jemand eine Idee?

"!d4.dll$" "d4.dll!$" oder "!(d4.dll$)" geht leider nicht:(

Verfasst: 22. Mai 2007 14:21
von macman
Da haben sich schon ganz andere die Zähne dran ausgebissen :-) Du Du es aber am Ende des Strings suchst, kannst Du es auch mit einem Vergleich macht.
if (myString.right(6).toLower() != "d4.dll")

Verfasst: 22. Mai 2007 14:25
von BartSimpson
nein leider nicht, da QRegExp für eine QStringList gebraucht wird.
Genauer gesagt: QStringList.filter()

Verfasst: 22. Mai 2007 14:58
von macman
Dann schreib dir deine eigene Filterroutine, ist doch schnell gemacht. Und da du genau weißt was Du vergleichen musst, ist es wahrscheinlich sogar schneller, als wenn Du RegExp darauf los lässt. Ist allerdings nicht so flexibel.

Verfasst: 22. Mai 2007 17:39
von upsala
Probier mal

Code: Alles auswählen

(?!d4.dll)$
Kanns aber gerade nicht testen...

Verfasst: 22. Mai 2007 18:04
von BartSimpson
Nee geht leider nicht, alle Dateien die mit d4.dll enden sind trotzdem enthalten.

Verfasst: 23. Mai 2007 07:20
von macman
Liess mir jetzt doch keine Ruhe :-) Hiermit sollte es gehen, zumindest verliefen Tests mit EditPad Pro positiv.

Code: Alles auswählen

^.*[^(d4\.dll$)]$

Verfasst: 23. Mai 2007 09:04
von BartSimpson
Nee geht leider auch nicht.
weder "^.*[^(d4\\.dll$)]$" noch "^.*[^(d4\.dll$)]$"
Hier mal noch mehr Infos.
Das steht in der Stringliste:

Code: Alles auswählen

("qsa1.dll", "qsad1.dll", "Qt3Support4.dll", "Qt3Supportd4.dll", "QtAssistantClient4.dll", "QtAssist
antClientd4.dll", "QtCore4.dll", "QtCored4.dll", "QtDesigner4.dll", "QtDesignerComponents4.dll", "Qt
DesignerComponentsd4.dll", "QtDesignerd4.dll", "QtGui4.dll", "QtGuid4.dll", "QtNetwork4.dll", "QtNet
workd4.dll", "QtOpenGL4.dll", "QtOpenGLd4.dll", "QtSql4.dll", "QtSqld4.dll", "QtSvg4.dll", "QtSvgd4.
dll", "QtTest4.dll", "QtTestd4.dll", "QtXml4.dll", "QtXmld4.dll")
und alle Debug Bibliotheken sollen raus.(enden ja auf d4.dll)
Also kurzerhand Liste=Liste.filter()

Verfasst: 23. Mai 2007 09:08
von upsala
Dann eben auf die harte Tour:

aus der QList ein QSet machen. Auf d4.dll vorhanden filtern und von QSet abziehen. Dann kannst du ja wieder eine QList daraus machen...

Aber ich glaube eine foreach-Schleife wäre kürzer einfacher und schneller...

Verfasst: 23. Mai 2007 09:11
von BartSimpson
Ich weiß, aber genau das wollte ich eigentlich nicht.

Verfasst: 23. Mai 2007 09:45
von macman
Ich hätte mir schon längst sowas gebastelt:

Code: Alles auswählen

	// sl ist die StringList mit den ganzen DLLs
	QStringList::iterator it = sl.begin();
	while (it != sl.end())
	{
		if ((*it).indexOf(QRegExp("d4\\.dll$")) > -1)
			it = sl.erase(it);
		else
			++it;
	}
Sogar mit RegExp, wenn es denn unbedingt sein muss :-) Ohne wäre es wohl noch schneller.

Verfasst: 23. Mai 2007 10:54
von franzf
Wenn du alles, was auf "d4.dll" endet löschen willst, warum verwendest du nicht

Code: Alles auswählen

bool QString::endsWith ( const QString & s, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const
Geht sicher schneller als die Auswertung einer QRegExp :)

Grüße
Franz

Verfasst: 23. Mai 2007 11:08
von BartSimpson
und was soll das??
Das liefert keine Liste sondern bool.

Filtern mit RegExp [gelöst]

Verfasst: 23. Mai 2007 11:19
von neuschi
Sucht ihr sowas hier?

Code: Alles auswählen

QRegExp rx (".*([^d][^4]|[^d].|.[^4])\.dll");
	
QStringList filtered = dlls.filter(rx);
\Ralf

Verfasst: 23. Mai 2007 11:25
von BartSimpson
genau das ist es:)
".*([^d][^4]|[^d].|.[^4])\\.dll"