QRegExp mit Callback- oder MatchEvaluator?

Alles rund um die Programmierung mit Qt
Antworten
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

QRegExp mit Callback- oder MatchEvaluator?

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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.....
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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...
gerome69
Beiträge: 188
Registriert: 28. April 2006 22:50
Wohnort: Berlin
Kontaktdaten:

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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);
        }
    }
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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();
}

Antworten