Announcement

Collapse
No announcement yet.

bei preg_replace Suchstring "erhalten" lassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • bei preg_replace Suchstring "erhalten" lassen

    Hallo liebe Forumgemeinde,

    ich habe ein Problem, welches denke ich mal, ziemlich einfach zu lösen sein dürfte: Allerdings stoße ich hier an meine Grenzen.

    Ich habe einen String der z.B. wie folgt aussehen könnte:

    Code:
    ###ndflndjsf###fdsfdsfdds###dfsdsfdsf####4####dsada####
    Das ganze betrifft die rot markierte 4. Ich suche nun eine Funktion, mit der ich die folgende Zeile erreichen kann.

    Code:
    ###ndflndjsf###fdsfdsfdds###dfsdsfdsf####€ 4,-####dsada####
    preg_replace hat mir leider nicht geholfen, da die 4 hier logischerweise immer verschwand.
    Eine äquivalente Funktion zu strpos und strlen, mit der ich dann die Position und die Länge des regulären Ausdrucks herausfinden kann, habe ich leider nirgends gefunden.

    Es kann sich nur eine Zahl in der Zeile befinden und sie kann auch mehr als ein zeichen lang sein, deswegen der Gedanke mit strpos und strlen.

    Wäre nett, wenn wenigstens einer mir hier helfen kann.

  • #2
    mit (\d+) matchen und dann die zurückgelieferten Arrays auswerten. Diese liefern die Position
    http://www.php.net/manual/de/function.preg-match.php

    und

    http://regexp-evaluator.de/evaluator/

    Wenn das bei dir nicht geht, dann halt auf die altmodische Tour:
    - Schleife über den String
    - jedes Zeichen auswerten
    - ist es eine Zahl -> Beginn gefunden
    - ist es nach der Zahl ein Buchstabe -> Ende gefunden
    Christian

    Comment


    • #3
      mit (\d+) habe ichs probiert gehabt. Aber wie gehe ich vor um die Position dann aus den Arrays zu erhalten? Die Länge erhalte ich dann bestimmt aus dem String im Array, oder? Dann bräuchte ich eihentlich nur noch die Position

      Comment


      • #4
        PREG_OFFSET_CAPTURE Wenn dieses Flag gesetzt ist, wird mit jeder gefundenen Übereinstimmung der dazugehörige Versatz in der Zeichenkette zurückgegeben. Beachten Sie, dass dies den Wert von matches in ein Array ändert, in dem jedes Element ein Array ist, das aus der übereinstimmenden Zeichenkette als Element 0 und deren Stelle in subject als Element 1 besteht

        Des Weiteren hast du die Möglichkeit, nur die Ziffer zu suchen mittel des RegEx und diese dann mit str_replace zu ersetzen
        Christian

        Comment


        • #5
          Hallo,

          warum nicht einfach eine Rückreferenzierung verwenden?

          PHP Code:
          <?php

          $str    
          '###ndflndjsf###fdsfdsfdds###dfsdsfdsf####4####dsada####';
          $newStr preg_replace('/#([0-9]+)#/''&euro; $1,-'$str);

          echo 
          htmlentities($newStr);
          Ergibt bei mir:
          HTML Code:
          ###ndflndjsf###fdsfdsfdds###dfsdsfdsf###&euro; 4,-###dsada####
          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Danke, der Tip mit

            PREG_OFFSET_CAPTURE war es.

            Die Version mit $1 habe ich jetzt nicht ausprobiert. Hätte hier aber ne Frage zu? "Versteckt" sich hinter $1 das "Suchergebnis"?

            Comment


            • #7
              group 1 der Treffer
              Christian

              Comment


              • #8
                OK. Vielen Dank für die Info. Wieder um eine wichtige Information schlauer

                Comment

                Working...
                X