Reguläre Ausdrücke - brauche dringend Hilfe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Reguläre Ausdrücke - brauche dringend Hilfe

    Hallo zusammen,

    ich komme irgendwie mit den regulären Ausdrücken nicht klar.
    Ich möchte aus einem XML-File alle Tags, die mit <FT anfangen und </FT> enden, entfernen, aber nicht die CDATA.

    Kann mir bitte jemand helfen ??

    Hab es so probiert:

    PHP-Code:
    '/^<FT[>$]</FT>/' 
    aber da passiert nichts.

    Danke und Viele Grüsse, Senifor.

  • #2
    Mit welcher Funktion hast du es denn versucht ?

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Hallo Tobi,

      mit preg_replace:

      PHP-Code:
      $suche '/^(<FT)[>$]/';
      preg_replace ($suche,'',$this->xmlstr); 
      Gruss, Senifor

      Kommentar


      • #4
        Also als erstes würde ich dir das Manual empfehlen.
        Was du machst ist folgendes:

        Du suchst vom Anfang des gesamten Strings nach <FT gefolgt von /> am Ende des Strings. d.h wenn der einen Treffer findet, dann nur wenn der String so aussieht <FT/> und das ist nicht was du willst.
        Schau dir im Manual die Modifikatoren der RegExp an.
        Der folgende Code würde einfach alles rausnehmen was zwischen den Tags steht:
        PHP-Code:
        $str preg_replace('/<FT.*<\\/FT>/iUs','',$str); 
        Wenn jetzt aber die CDATA nicht elöscht werden sollen, dann wirds mit REgExp etwas komplizierter. Denn du musst vor dem Löschen prüfen ob der gematchte Teil überhaupt gelöscht werden soll.
        Das darfst du aber selber machen. Tipp: Schau dir dazu auch den Modifikator e bei den RegExp an. Dieser Link http://www.php-center.de/faq/faq-regexp.html#regexp-11
        könnte dir auch noch weiterhelfen.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Versteh ich dich richtig du möchtest die FT-Tags entfernen, aber nicht was dazwischen steht? So:

          preg_replace("/<FT[^>]*>(.*)<\/FT>/isU", "\\1", $string);
          Zuletzt geändert von Luke; 17.03.2006, 20:05.

          Kommentar


          • #6
            Hallo Luke,

            danke für Deine Hilfe. Funktioniert gut :-).
            Stell mich noch ein bisschen an mit regulären Ausdrücken. Hoffe ich begreifs irgendwann.

            Gruss Senifor

            Kommentar


            • #7
              Hallo zusammen,

              nachdem ich mich nun etwas mit regulären Ausdrücken befasst habe und auch das Tutorial gelesen habe, habe ich auch so einiges hinbekommen. Leider stolper ich immer noch über so manches Problem.
              z.B. habe ich jetzt eine Zeichenkette in der ein Ausdruck in eckigen Klammern vorkommt. Diesen möchte ich gerne löschen, aber es will nicht so klappen. Der String sieht in etwa so aus: "Name, Strasse, PLZ Ort, [bla]."

              Hab es versucht mit:
              PHP-Code:
              $address preg_replace ("/\\[.*\\]/","\\1",$address); 
              Da löscht er mir auch irgendwie Leerzeichen ausserhalb der eckigen Klammern. Diese brauche ich aber noch um später Postleitzahl vom Ort zu separieren.

              Danke und viele Grüsse, Senifor

              Kommentar


              • #8
                Code:
                /\[.*\]/U
                mach das mal "U"ngierig. wenn du nur löschen willst, kannst du das \\1 auch weglassen ... da ist ja nix mehr ;9
                Kissolino.com

                Kommentar


                • #9
                  Hallo Wurzel,

                  danke für Deine Antwort.
                  hm, es liegt gar nicht daran hab ich grad festgestellt. Der Ausdruck arbeitet einwandfrei . Sorry.
                  Ich wollte gleich danach noch das letzte Komma und den Punkt, bzw. nur das Komma, wenn kein Punkt mehr kommt, bzw. nur den Punkt, wenn kein Komma mehr kommt.

                  Also nach dem löschen der eckigen Klammern mit Inhalt kann der String 3 Möglichkeiten annehmen:

                  1. "Name, Strasse, PLZ Ort,"
                  2. "Name, Strasse, PLZ Ort."
                  3. "Name, Strasse, PLZ Ort,."

                  PHP-Code:
                  $address preg_replace ("/[\.$|,$]/","\\1",$address); 
                  Das geht schief. Da löscht er scheinbar die ganzen Kommas mit weg, die brauch ich aber, um den String zu separieren. Will nur das letzte Komma oder den Punkt weglöschen, oder beides, wenn vorhanden.

                  Danke für die Hilfe. Gruss, Senifor

                  Kommentar


                  • #10
                    Hi,
                    erklär doch bitte nochmal kurz was du vor hast.

                    Daraus
                    Original geschrieben von Senifor
                    Ich wollte gleich danach noch das letzte Komma und den Punkt, bzw. nur das Komma, wenn kein Punkt mehr kommt, bzw. nur den Punkt, wenn kein Komma mehr kommt.
                    werde ich nicht vollständig schlau. So wie ich es im moment interpretiere hört
                    sich das für mich nach einem fall für positive lookaheads an.

                    greets
                    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                    Kommentar


                    • #11
                      PHP-Code:
                      $string preg_replace("/\[[^\]]*\](\.?)$/""\\1"$string); 
                      Das \\1 nur wenn du den Punkt noch behalten willst

                      PS: Zitier mich für den richtig escapden String

                      Kommentar


                      • #12
                        Danke.

                        Kommentar

                        Lädt...
                        X