Achim: preg_match_all und preg_replace Syntax richtig?

Hallo
habe leider mit regexpresions noch nicht viel gemacht daher etwas unsicher

Kann mal jemand über den folgenden codes sehen ober so passt
Es soll nach inhalten im string gesucht werden und diese dann ersetzt werden
Ich benötige alle gefundenen in einem array was dann wieder mit werten eines anderen (erfolgt später) verglichen wird und ersetzt wird
Später läuft dann alles in einer schliefe.

$string ='Hallo <-KAnrede-> <-KVorname-> <-KNachname-> <-Artikelliste->
   <--Artikelliste-->
Leider haben wir von Ihnen noch keine Rückmeldung zu der/den folgenden Fragen erhalten.

<-Artikelliste->';

$regexpr = "/<-Artikelliste[->]*>/";
if (preg_match_all($regexpr,$string,$ausgabe)){
echo "<br>das muster passt auf ===>";
echo "<br>Gesamtmuster : ";
echo "<br>Teilmuster 1.1 : ".$ausgabe[0][0];
echo "<br>Teilmuster 1.2 : ".$ausgabe[0][1];
echo "<br>Teilmuster 1.3 : ".$ausgabe[0][2];
}else{
    echo "<br>leider nichts gefunden <==>";
}

function remove_dw_comments($string,$muster,$ersetzt)
     {
     return preg_replace("/$muster/U",$ersetzt,$string);
     }

$ersetzt= '<{$stringname}>';

echo "<br>mal sehn was er ausgibt ===>".remove_dw_comments($string,$ausgabe[0][1],$ersetzt)

Gruss und danke

Achim

  1. Hallo,

    Kann mal jemand über den folgenden codes sehen ober so passt

    ja was haben Deine Tests denn ergeben?

    Es soll nach inhalten im string gesucht werden

    ach ne, kaum zu glauben. nach welchen denn?

    $regexpr = "/<-Artikelliste[->]*>/";

    '-' in einer Zeichenklasse muß glaub ich escaped werden: [-]
    [->]* damit suchst Du das mehrfache Vorkommen von '-' oder '>'. Wenn ich richtig sehe, sucht Du aber '->' oder '-->', also [-]+>

    Gruß, Andreas

    --
    SELFFORUM - hier werden Sie geholfen,
    auch in Fragen zu richtiges Deutsch
    1. Hallo,

      $regexpr = "/<-Artikelliste[->]*>/";

      '-' in einer Zeichenklasse muß glaub ich escaped werden: [-]
      [->]* damit suchst Du das mehrfache Vorkommen von '-' oder '>'. Wenn ich richtig sehe, sucht Du aber '->' oder '-->', also [-]+>

      mit
       $regexpr = "/<+[-][a-z]|[A-Z]rtikelliste[-]+>/";
      klappt es aber nicht da gibt er mir

      das
      Artikelliste-->
      und das
      Artikelliste->
      aus

      wobei
      <-1rtikelliste->
      <--Artikelliste-->
      <-Artikelliste->

      diese im text enthalten waren

      Kannst mir jemand bei dieser abfrage behilflich sein

      Super wäres es, wenn ich alle die mit
      <- beginnen und mit
      -> enden und nur aus alphanumerischen zeichen besetehen
      finde und ein ein array abspeichern könnte wie es mit preg_match_all
      gehen sollte

      Viele Grüsse und danke schonmal

      Achim

      1. Hallo achim.

        '-' in einer Zeichenklasse muß glaub ich escaped werden: [-]

        Nein, das ist ein Irrglaube.

        [->]* damit suchst Du das mehrfache Vorkommen von '-' oder '>'.

        Jain, eines oder keines der Zeichen, die in der Klasse notiert sind, einschließlich des Backslash.

        Super wäres es, wenn ich alle die mit
        <- beginnen und mit
        -> enden und nur aus alphanumerischen zeichen besetehen

        Das hier wäre ein Anfang:

        $muster = "/^<-\w+->$/";

        Wobei zu beachten ist, dass '\w' auch den Unterstrich einbezieht und dass die Behandlung von Umlauten plattformabhängig ist, statt dessen wäre z.b. auch

        $muster = "/^<-[A-Za-z0-9äÄöÖüÜß]+->$/i";

        denkbar.

        Freundschaft!
        Siechfred

        --
        Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
        1. Hallo Siechfred,

          Das hier wäre ein Anfang:

          $muster = "/^<-\w+->$/";

          Wobei zu beachten ist, dass '\w' auch den Unterstrich einbezieht und dass die Behandlung von Umlauten plattformabhängig ist, statt dessen wäre z.b. auch

          $muster = "/^<-[A-Za-z0-9äÄöÖüÜß]+->$/i";

          damit klappte es leider nicht er gab nur anfangszeichen aus und anderen...

          Hier mal der string
          $string ='Hallo <-KAnrede-> <-KVorname-> <-KNachname-> <-1rtikelliste-><--Artikelliste-->Leider haben wir von Ihnen noch keine Rückmeldung zu der/den folgenden Fragenerhalten.<-Artikelliste->';

          und ich möchte alle rausziehen die mit
          <- beginnen und
          mit -> enden und nur
          [<a-zA-Z] sind
          dabei saool mir dan das array folgendes ausgeben

          <-KAnrede->
          <-KVorname->
          <-KNachname->
          aber nicht <--Artikelliste--> und <-1rtikelliste->
          aber schon
          <-Artikelliste->

          Gruss Achim

          1. Hallo Achim.

            $muster = "/^<-\w+->$/";
            $muster = "/^<-[A-Za-z0-9äÄöÖüÜß]+->$/i";
            damit klappte es leider nicht er gab nur anfangszeichen aus und anderen...

            Ja, liegt an den Begrenzern, war mein Fehler, hatte deine Ausgangsfrage nicht richtig gelesen :)

            Hier mal der string
            $string ='Hallo <-KAnrede-> <-KVorname-> <-KNachname-> <-1rtikelliste-><--Artikelliste-->Leider haben wir von Ihnen noch keine Rückmeldung zu der/den folgenden Fragenerhalten.<-Artikelliste->';

            Lass mal die Begrenzer weg und setze das g-Flag (wobei mir das Verhalten von preg_match_all gerade nicht vorliegt, da php.net down zu sein scheint, evtl ist 'g' da überflüssig). Ach so, das sähe dann so aus (mit g-Flag):

            $muster = "/<-[A-Za-z0-9äÄöÖüÜß]+->/g";

            Freundschaft!
            Siechfred

            --
            Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
            1. Hallo Siegfred

              rade nicht vorliegt, da php.net down zu sein scheint, evtl ist 'g' da überflüssig). Ach so, das sähe dann so aus (mit g-Flag):

              $muster = "/<-[A-Za-z0-9äÄöÖüÜß]+->/g";

              jetzt bringt er
              Unknown modifier 'g'

              verwende hier php-5.0.2

              ???

              Gruss und danke für die Hilfe

              Achim

              1. Hallo Achim.

                jetzt bringt er
                Unknown modifier 'g'

                Dann eben ohne das "g" am Ende.

                Freundschaft!
                Siechfred

                --
                Hinweis an alle Karnevalsmuffel: Aschermittwoch ist alles vorbei.
      2. mit
        $regexpr = "/<+[-][a-z]|[A-Z]rtikelliste[-]+>/";
        klappt es aber nicht

        _WAS_ klappt nicht?

        da gibt er mir

        das
        Artikelliste-->
        und das
        Artikelliste->
        aus

        Du sollst es ja auch richtig schreiben:
        $regexpr = "/<[-]+[a-z]|[A-Z]rtikelliste[-]+>/";

        Super wäres es, wenn ich alle die mit
        <- beginnen

        '<-'

        und mit -> enden

        '->'

        und nur aus alphanumerischen zeichen besetehen

        \w

        also:
        /<-\w+->/

        vorhin hast Du allerdings noch was anderes gesucht. Mir scheint das Problem, daß Du Dein Problem nicht genau beschreibst.

        finde und ein ein array abspeichern könnte wie es mit preg_match_all
        gehen sollte

        laß uns mal beim regExp bleiben: was suchst Du? Wenn Du das nicht weißt, kann Dir keiner helfen.

        Gruß, Andreas

        --
        SELFFORUM - hier werden Sie geholfen,
        auch in Fragen zu richtiges Deutsch