Portál AbcLinuxu, 25. dubna 2024 21:38


Dotaz: QRegExp

27.5.2016 20:57 Jirka
QRegExp
Přečteno: 400×
Odpovědět | Admin
Potrebuji v souboru najit retezce ve tvaru "protocol://nejaka/cesta/soubor.ext" vcetne uvozovek, kde protocol je bud http nebo ftp. Zkouzel jsem QRegExp:
QRegExp regexp("\"(ftp|http)://(.*)\"");

QString mystring("This is \"http://moje/http.png\" and this is \"ftp://moje/ftp.png\"");
int pos = regexp.indexIn(mystring);
qDebug() << pos;
qDebug() << regexp.cap(0);
qDebug() << regexp.cap(1);
qDebug() << regexp.cap(2);
Ale vysledek je spatny:
8
"\"http://moje/http.png\" and this is \"ftp://moje/ftp.png\""
"http"
"moje/http.png\" and this is \"ftp://moje/ftp.png"
cap(1) by mel byt ten protokol a cap(2) napr to moje/http.png

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.5.2016 22:31 Jirka
Rozbalit Rozbalit vše Re: QRegExp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem se k tomu dokopal. Stacilo regexp.setMinimal(true); a uz to funguje.
27.5.2016 22:31 chrono
Rozbalit Rozbalit vše Re: QRegExp
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pri Qt treba povoliť void QRegExp::setMinimal(bool minimal). V iných implementáciách regexp sa to môže dať urobiť aj inak. Napr.v Python (a vo veľa ďalších implementáciách) by stačilo niečo ako "\"(ftp|http)://(.*?)\""), prípadne sa dá na miesto toho (.*) použiť niečo ako ([^\"]*).
27.5.2016 23:24 Jirka
Rozbalit Rozbalit vše Re: QRegExp
Koukam, ze jsem to nasel na minutu presne. Ale dekujem.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.