der_rähnner: Perl-Regex -> PHP-Regex?

Guten Tag,

ich habe eine RegularExpression in PERL vorliegen, brauche diese aber in PHP.
Nun weiss ich nicht, ob die Regex von PHP auch so mächtig ist, wie die von PERL oder nur grundlegende Sachen kann. So scheint es ja in PHP nicht zu gehen, ODER-Verknüpfungen zu nutzen?!?

Hier einmal meine PERL-Regex:

$anzeige=~/(EZ|BJ|Bj|Baujahr|Modelljahr|Modell|Mod).{0,1} {0,1}´{0,1}(\d{0,2}/{0,1}\d{0,4})/

Zur weiteren Verwendung nutze ich dann $2 sollten Übereinstimmungen vorliegen.

Danke Rähni

  1. Hi!

    ich habe eine RegularExpression in PERL vorliegen, brauche diese aber in PHP.
    Nun weiss ich nicht, ob die Regex von PHP auch so mächtig ist, wie die von PERL oder nur grundlegende Sachen kann.

    Neben den posix-regex (ereg*-Funktionen) gibt es noch die Perl-kompatiblen (PCRE): http://de3.php.net/pcre, also die preg* Funktionen.

    Die sind sowieso zu empfehlen.

    Grüße
    Andreas

    --
    SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
    1. Neben den posix-regex (ereg*-Funktionen) gibt es noch die Perl-kompatiblen (PCRE): http://de3.php.net/pcre, also die preg* Funktionen.

      Das bedeutet ich kann genau die PERL-Notation nutzen? Das wäre schön. Werde es einmal ausprobieren.

      Danke Rähni

      1. Neben den posix-regex (ereg*-Funktionen) gibt es noch die Perl-kompatiblen (PCRE): http://de3.php.net/pcre, also die preg* Funktionen.
        Das bedeutet ich kann genau die PERL-Notation nutzen? Das wäre schön. Werde es einmal ausprobieren.

        Hm, das preg_match hat funktioniert.
        Nun macht aber preg_replace Probleme. Folgendes soll passieren:
        Alle '.' sollen in ',' umgewandelt werden.
        Mach ich
        $km=preg_replace (".","",$km);

        kommt als Fehler: Warning: Delimiter must not be alphanumeric or backslash in ...

        Nehm ich den "" raus, kommt als Fehler: Warning: No ending delimiter '.' found in ...

        Wo liegt der Fehler? Und ist es egal ob ich doppelte Hochkommas oder einfache Hochkommas nutze?

        Danke Rähni

        1. Hallo!

          Alle '.' sollen in ',' umgewandelt werden.
          Mach ich
          $km=preg_replace (".","",$km);

          kommt als Fehler: Warning: Delimiter must not be alphanumeric or backslash in ...

          ja, der PCRE-Parser denkt, Du wolltest \ als Delimiter nehmen, und er ist nicht erlaubt.

          Du brauchst ja sowas wie "/./" oder "#.#" ...

          Also:

          $km=preg_replace ("/\./",",",$km);

          oder (in dem Fall) besser/einfacher ohne RegExpr:

          $km = str_replace ('.', ',', $km);

          Nehm ich den "" raus, kommt als Fehler: Warning: No ending delimiter '.' found in ...

          ja logisch. In dem Fall nimmt er . als Delimiter an, und findet den aber nicht am Ende.

          Und ist es egal ob ich doppelte Hochkommas oder einfache Hochkommas nutze?

          Nein. Der Unterschied: http://de3.php.net/manual/de/language.types.string.php#language.types.string.syntax

          Grüße
          Andreas

          --
          SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
          1. Nein. Der Unterschied: http://de3.php.net/manual/de/language.types.string.php#language.types.string.syntax

            Super!
            Danke für deine Hilfe.

            Eine Frage hätte ich noch.
            Ich nutze fucntion's in denen ich Werte ermittle.
            Will ich dann die in der fuction ermittelten Werte im Hauptprogramm verwenden, stehen mir diese nicht mehr zur Verfügung.

            Nur wenn ich mit die Variablen mit global $variable; in der function initialisiere, kann ich auch von ausserhalb darauf zurueckgreifen.

            Noch komplizierter war es, als ich in einer Function ein Array aufgebaut habe und in einer zweiten Function darauf zurückgreifen wollte.
            Da musste ich in beiden Functions mit global $array; die Arrays 'einrichten' um darauf zurueckgreifen zu koennen.

            Ich habe mich bisher nur sporadisch mit PHP beschäftigt, aber da ist mir dieses recht komplizierte Prozedere nicht untergekommen. Ist das auch anders lösbar?

            Der Rähni

            1. hi,

              Ich habe mich bisher nur sporadisch mit PHP beschäftigt, aber da ist mir dieses recht komplizierte Prozedere nicht untergekommen.

              dann wäre jetzt sicher ein guter zeitpunkt, dich damit zu beschäftigen: http://www.php.net/manual/de/language.variables.scope.php

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. dann wäre jetzt sicher ein guter zeitpunkt, dich damit zu beschäftigen: http://www.php.net/manual/de/language.variables.scope.php

                Hm, danach sieht es so aus, als gänge es nicht anders.

                Was mir gefallen wuerde, waere ja noch die Rueckgabe des in der function ermittelnden Wertes an die aufrufende Funktion, da ist aber leider kein Beispiel dabei.

                Und im Falle meines Arrays, das ich einmal aufbaue und dann immer wieder verwenden will, sehe ich gar keine andere Moeglichkeit, das Problem anders zu loesen.

                Der Rähni

                1. echo $begrüßung;

                  Und im Falle meines Arrays, das ich einmal aufbaue und dann immer wieder verwenden will, sehe ich gar keine andere Moeglichkeit, das Problem anders zu loesen.

                  Dafür gibt es zwei Möglichkeiten.

                  • Die Funktion erstellt das Array und gibt es als Ergebnis (return) an die aufrufende Instanz zurück. Dort wird es in eine in eine Variable, die in dem dortigen Scope gültig ist, geschrieben.

                  $array = deine_function($parameter_oder_auch_keine);

                  • Die Funktion übernimmt eine Variable per Referenz und gibt das Ergebnis auf dem Wege wieder zurück.

                  Deklaration: function deine_function(&$referenz) {...}  // beachte das & und das Handbuch

                  Aufruf: deine_function($array);

                  Für Anfänger würde ich die Referenz-Methode aber nicht empfehlen.

                  echo "$verabschiedung $name";

            2. Hi!

              Ich nutze fucntion's in denen ich Werte ermittle.
              Will ich dann die in der fuction ermittelten Werte im Hauptprogramm verwenden, stehen mir diese nicht mehr zur Verfügung.

              Natürlich nicht, Variablen innerhalb einer Funktion sind normalerweise auch nur in der Funktion sichtbar - und das ist auch gut so ;-)

              Nur wenn ich mit die Variablen mit global $variable; in der function initialisiere, kann ich auch von ausserhalb darauf zurueckgreifen.

              Sollte man nach Möglichkeit lassen, IMHO.

              Noch komplizierter war es, als ich in einer Function ein Array aufgebaut habe und in einer zweiten Function darauf zurückgreifen wollte.
              Da musste ich in beiden Functions mit global $array; die Arrays 'einrichten' um darauf zurueckgreifen zu koennen.

              Du kannst eine Funktion ein Array zurückgeben lassen, und Du kannst einer Funktion ein Array übergeben.

              Ich habe mich bisher nur sporadisch mit PHP beschäftigt, aber da ist mir dieses recht komplizierte Prozedere nicht untergekommen. Ist das auch anders lösbar?

              Vielleicht hilft das: http://de3.php.net/manual/de/functions.returning-values.php

              Du kannst einer Funktion auch Arrays per Referenz übergeben, dann wird das Array entsprechend direkt geändert, und nicht nur die Kopie im lokalen Scope der Funktion. siehe: http://de3.php.net/manual/de/language.references.whatdo.php

              Grüße
              Andreas

              --
              SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/