Anzeige:
Ergebnis 1 bis 2 von 2

Thema: wxWidgets und Regular Expression (wxRegEx)

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.02.2003
    Beiträge
    33

    wxWidgets und Regular Expression (wxRegEx)

    Hallo,

    ich habe ein kleines Problem mit einer Regular Expression in wxWidgets. Ich möchte aus einer HTML-Datei alle <script ...>text oder nicht</script>-Teile entfernen. Es funktioniert auch, allerdings ein wenig falsch. Er entfernt alles zw. dem ersten gefundenen <script...> und dem letzten </script> der Datei. Irgendwie habe ich eine Denkblockade. Was könnte falsch sein? (Code jetzt nicht ganz formgerecht aus dem Kopf)

    Code:
    wxString html("<script bla bla blubb>gna</script> haha <script ugga>urgs</script>");
    wxRegEx *reg = new wxRegEx("<script.*>.*</script>");
    reg->Replace(&html, "hallo");
    ...
    Nun müßte ja zweimal hallo auftauchen, tut es aber nicht, sondern nur einmal und auch sonst taucht nichts weiter auf.

    Vielen Dank für Eure Hilfe,

    Morfio ...

  2. #2
    Registrierter Benutzer
    Registriert seit
    04.02.2003
    Beiträge
    33
    Hi,

    ich habe die Lösung gefunden. Es handelt sich um das Problem mit Greedy und Non-Greedy (= hungrig).

    Greedy bedeutet, dass innerhalb der Regular Expression alles soweit wie möglich bis zum wirklichen Ende dieser (also bsplw. der letzte </script>-Tag, der im String gefunden wird) mitgenommen wird. Es wird nicht das direkt nachfolgende benutzt.

    Das ist ohne Weiteres aber mit dem ? (Fragezeichen) erzwingbar. Somit muss die Regular Expression in etwa so aussehen:

    <script.*?>.*?</script>

    Nun haben aber leider die Regular Expression Klassen von wxWidgets einen unbehobenen Bug, mit dem das so nicht möglich ist. Beim Ausführen des Programms stürzt dieses unweigerlich mit einem Segmentation Fault ab.

    Ich benutze nun die Boost-Library für solche Aktionen (www.boost.org).

    Viele Grüße,

    Morfio ...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •