compuboy1010: preg_replace()

Guten Tag,

Aus einem Produktnamen der wie folgt aussehen könnte:
nutella-ferrero<sup>®</sup> neu sollen die Leerzeichen, Bindestriche, html tags und html entities entfernt werden.
Also praktisch folgendes übrig bleiben: nutellaferreroneu

Aber nach meiner preg_replace() Funktion bleibt nix über! Was mache ich falsch ?

while($row = $this->db->fetch_array())
  {
   $productname = preg_replace('#®|[^a-z0-9] #', '', strip_tags($row['d_produktnamehtml']));
   $filetest = $filepath."/".$type."/".$productname.".pdf";

if (file_exists($filetest))
      {
    $row['filesize'] = sprintf("%01.2f", (filesize($filetest) / 1000));
    $downloads[] = $row;
      }
     }

$this->assignVars('downloads', $downloads);
  $this->assignVars('filepath', $filepath);

Danke

  1. Wenn Du möchtest, dass immer nur 1 Buchstabe vergleichen wird, dann solltest Du das auch mit angeben, weil sich der ganze Ausdruck sonst gierig verhält und alles aufnimmt und du solltest case-insensitive suchen:

    #(®|[^a-z0-9]| ).?#i

    Hoffe das hilft,

    Gruss Stefan

    1. Hallo,

      #(®|[^a-z0-9]| ).?#i

      Hilft nicht wirklich. Wo ist in dem Ausdruck die Anweisung, dass Bindestriche und Leerzeichen rausgefiltert werden sollen?
      Warum bekomme ich immer einen leeren String am Ende.

      Heißt "^a-z0-9", dass a-z und 0-9 drin bleiben sollen oder dass die durch "" ersetzt werden ?

      Blicke nicht durch. :-(

      Danke

      1. #(®|[^a-z0-9]).?#i

        das ist aufgeteilt:

        | bedeutet ein Logisches ODER

        dh. die Eintrage $reg; und [^a-z0-9] werden einzeln betrachtet... eines der beiden muss erfüllt sein, sonst wird der eintrag ersetzt... das .? bedeutet, dass es sich max. um 1 Zeichen handeln darf. Nimm bitte das "| " raus, ich glaub das war falsch...

        Gruss
        Stefan

        1. Hallo Stefan,

          preg_replace('#®|[^a-z0-9]#','',strip_tags($row['d_produktnamehtml']));

          Diese Zeile funktioniert. Das Problem lag woanders im Code.
          Danke für deine Erklärung. Warum funzt obiges ?

          Heißt obiges nicht:

          Suche nach "®" oder den Buchstaben a bis z oder Ziffern 0-9 und ersetze jedes Vorkommen durch "", also durch nichts ?
          Warum werden dennoch (wie gewollt) Bindestriche und Leerteichen entfernt ? Wo kommt das in obiger Funktion vor?

          Danke

          1. Suche nach "®" oder den Buchstaben a bis z oder Ziffern 0-9 und ersetze jedes Vorkommen durch "", also durch nichts ?
            Warum werden dennoch (wie gewollt) Bindestriche und Leerteichen entfernt ? Wo kommt das in obiger Funktion vor?

            Ne das obige heißt: Ersetze jedes Zeichen das nicht (^) zwischen a-z oder 0-9 ist durch "" das ® hat sogesehen KEINEN Einfluss *g*

            Willst du, dass das ® Zeichen drin vorkommen darf musst Du es umbauen... :o)

            Gruss
            Stefan

            1. Hallo,

              Ne das obige heißt: Ersetze jedes Zeichen das nicht (^) zwischen a-z oder 0-9 ist durch "" das ® hat sogesehen KEINEN Einfluss *g*

              Aha, jetzt wird einiges deutlicher.
              Leider gibt es keine wirklich guten Tutorials zu preg_replace().
              Die Beschreibung auf der php.net Seite kann man vergessen.

              Willst du, dass das ® Zeichen drin vorkommen darf musst Du es umbauen... :o)

              Nein, es darf nicht drin vorkommen. Ist schon richtig so.

              Danke für die Hilfe. Alles Gute!

              Compu

              1. Aha, jetzt wird einiges deutlicher.
                Leider gibt es keine wirklich guten Tutorials zu preg_replace().
                Die Beschreibung auf der php.net Seite kann man vergessen.

                Schau mal unter:
                http://www.php.net/manual/de/pcre.pattern.modifiers.php
                http://www.php.net/manual/de/pcre.pattern.syntax.php

                Mehr Infos hatte ich auch nie :-(
                Dauert leider etwas bis mal die Logik, sofern es eine gibt, versteht.
                Manchmal machen die Dinger aber dennoch alles mögliche außer dem was sie sollen *g*

                Auf Anhieb ist es immer schwer einen perfekten Reg-Ex zu treffen ... da kann ich Dich beruhigen. Es gilt: Übung macht den Meister :-)

                you're welcome,

                Gruss Stefan