Seite 1 von 1

QRegExp mit Callback- oder MatchEvaluator?

Verfasst: 2. Mai 2006 08:11
von gerome69
... suche ich gerade vergeblich.

Etwa sowas (Pseudo-Code):

Code: Alles auswählen

QString callback(QString match) {
     // mache was auch immer mit dem Match und gib ihn dann zurück
     match="|"+match+"|";
     return match;
}

QRegExp rx( "<(.*?)>" );     Zum Rausfinden des Inhalts von Tags
QString htmlLine="bla <b>blubb</b> blubber <i>bla</i>";

htmlLine.replace(rx,&callback); // Aber das finde ich halt nicht, das es sowas gibt.
Danke schön für Tips, Gérôme

Verfasst: 2. Mai 2006 10:44
von patrik08
QtXml tag auslesen... \qt4\examples\xml\dombookmarks (beispiele..)
oder eleganter Xpath von libxml2 xslt... xml => vector array ecc... ist sehr schnell!

das qt html ist sehr sauber und last sich auch als xml lesen...
falls von externe quelle html (unsauber) ... einfach zuerst durch tidy putzen libtidy.....

Verfasst: 2. Mai 2006 10:56
von gerome69
patrik08 hat geschrieben:QtXml tag auslesen... \qt4\examples\xml\dombookmarks (beispiele..)
oder eleganter Xpath von libxml2 xslt... xml => vector array ecc... ist sehr schnell!

das qt html ist sehr sauber und last sich auch als xml lesen...
falls von externe quelle html (unsauber) ... einfach zuerst durch tidy putzen libtidy.....
Das hilft mir nicht. Die Tag-Geschichte sollte ja nur als primitives Beispiel dienen.
Ich brauche sowas wie eine Callback-Funktionalität.

Gruß, Gérôme

Verfasst: 2. Mai 2006 11:07
von patrik08
ohne ein konkretes reales beispiel kann ich auch nicht helfen..
\qt4\examples\tools\regexp\release

http://doc.trolltech.com/4.1/qregexp.html

Regular expression: http://en.wikipedia.org/wiki/Regular_expression
ist das fundament beim programmieren ... bei qt benennt es sich
QRegExp in php http://php.net/preg-match ist alles das selbe ... eben ein fundament.... auf dem man programme schreiben kann...

Verfasst: 2. Mai 2006 11:43
von gerome69
patrik08 hat geschrieben:ohne ein konkretes reales beispiel kann ich auch nicht helfen..
\qt4\examples\tools\regexp\release

http://doc.trolltech.com/4.1/qregexp.html

Regular expression: http://en.wikipedia.org/wiki/Regular_expression
ist das fundament beim programmieren ... bei qt benennt es sich
QRegExp in php http://php.net/preg-match ist alles das selbe ... eben ein fundament.... auf dem man programme schreiben kann...
Sorry, aber das kenne ich doch alles.
Ich suche eine grundsätzliche Möglichkeit, eine Callback/MatchEvualator-Geschichte zu implementieren.
Wenn das mit Q... nicht geht, werde ich wohl auf Boost zurückgreifen.

Gruß, Bernd

Verfasst: 2. Mai 2006 12:13
von patrik08
Callbacks oder wie in php "create_function" werden bei mir im qt durch signale / slots ersetzt....

http://doc.trolltech.com/4.1/signalsandslots.html und in einer class kann man mit signale slot emit praktisch alles anstellen

Code: Alles auswählen

 void Counter::setValue(int value)
    {
        if (value != m_value) {
            m_value = value;
            emit valueChanged(value);
        }
    }

Verfasst: 2. Mai 2006 21:15
von upsala
Mach halt sowas in der Art (ungetestet):

Code: Alles auswählen

QString callback(QString match) { 
  match="|"+match+"|"; 
  return match; 
} 
 
QRegExp rx( "<(.*?)>" );
QString str="bla <b>blubb</b> blubber <i>bla</i>";
int pos=0;

while ((pos = rx.indexIn(str, pos)) != -1) {
  QString m=callback(rx.cap(1));
  str.replace(pos, rx.matchedLength());
  pos+=-rx.matchedLength()+m.length();
}