Problem mit preg_replace

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

  • Problem mit preg_replace

    Wie kann ich mit preg_replace() alle ausser die von mir bestimmten Zeichen ersetzen? Wenn ich z.B. den String "(/8°¢¢|§¬|¬r76r|§76t(/ç)=üpeä$eü489sdz76" habe möchte ich alles ausser Zahlen und Buchstaben, also [a-z0-9äüö]/i (nur zur Übersicht die gültigen Zeichen), durch "" ersetzen also löschen.

    Vielen Dank im Voraus!

  • #2
    meinst du sowas?

    PHP-Code:
    $string "dhsjkfh83254[]}³³²[]²023432jdksnc";
    $string preg_replace("#[^a-z0-9äöü]#","",$string);
    echo 
    $string;

    #ausgabe: dhsjkfh83254023432jdksnc 
    mfg

    Kommentar


    • #3
      Super! Darauf hätte ich selbst kommen müssen... Vielen Dank!

      Noch was:

      mit ereg() funktioniert dieses Suchmuster:
      PHP-Code:
      [a-z0-9\-\._\?\,\'/\\\ \+&%\$#\=~] 
      mit preg_match() nicht da die Zeichenkette bei / als beendet gilt.
      Ich habe es auch schon mit backslash vor dem / probiert geht aber trotzdem nicht.

      Fehlermeldung:

      Warning: Unknown modifier '\'


      EDIT:
      meine Backslashes werden vom Forum geschluckt:
      [a-z0-9\-\._\?\,\'/\\\ \+&%\$#\=~]

      Zuletzt geändert von jmc; 07.08.2006, 14:31.

      Kommentar


      • #4
        Unknown Modifier...

        Du weißt was Delimiter sind? Und das alles was HINTER dem Delimeter kommt als Modifier angesehen wird?

        Nimm doch einfach ein Zeichen als Delimiter, das in deinem Ausdruck nicht vorkommt. (! zB)

        Kommentar


        • #5
          Ja, weiss ich, aber ich dachte ehrlich gesagt man könne sie mit einem Backslash "neutralisieren". Ist das nicht möglich?

          Kommentar


          • #6
            Wenn du in deiner Zeichenkette, das Zeichen des Delimeters brauchst, dann sollte es durch escapen trotzdem benutzbar sein...

            Kommentar


            • #7
              Original geschrieben von jmc
              Ja, weiss ich, aber ich dachte ehrlich gesagt man könne sie mit einem Backslash "neutralisieren". Ist das nicht möglich?
              klar ist das möglich, hast du aber in deinem beispiel nicht gemacht.

              Kommentar


              • #8
                und wie?

                Kommentar


                • #9
                  [a-z0-9-._?,'/\ +&%\$#=~]
                  mit preg_match() nicht da die Zeichenkette bei / als beendet gilt.
                  Ich habe es auch schon mit backslash vor dem / probiert geht aber trotzdem nicht.
                  alles klar, jmc? ich sehe nirgends \/

                  Kommentar


                  • #10
                    In meinem Code hat es eigentlich ein Backsalsh davor hab nachgeschaut. Irgendwie ist das im Forum komisch, aber trotzdem vielen Dank. Ich benutze jetzt einfach § was ich sonst nie benötige als delimiter

                    Kommentar


                    • #11
                      damit: "\/" funktionierts aber auch, habe es extra getestet.

                      Kommentar


                      • #12
                        Dachte ich auch. Vieleicht liegt der Fehler irgendwo weiter vorne ich muss mal schauen.

                        Kommentar


                        • #13
                          du hast doch überhaupt keinen Delimiter ....


                          du musst den Regex dann so verwenden:
                          PHP-Code:
                          preg_match('/[a-z0-9\-\._\?\,\'/\\\ \+&%\$#\=~]/'); 
                          dann funktioniert das auch mit dem Backslash und ohne Fehlermeldung

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar

                          Lädt...
                          X