Norbert: Regulärer Ausdruck

Hallo,
wie kann ich das    letzte    Vorkommen eines Textstrings in einer Zeile
ersetzen?
Mit fG
Norbert

  1. Hello,

    wie kann ich das    letzte    Vorkommen eines Textstrings in einer Zeile
    ersetzen?

    Bestimmen, suchen, finden, Position feststellen, Länge feststellen, ausschneiden, einfügen.

    Da die Prozessoreigenen Stringfunktionen i.d.R. von links nach rechts arbeiten (kleine Adresse zur großen), kann es sinnvoll sein, den ganzen String zu reversieren und nach dem ersten Vorkommen des ebenfalls reversierten Suchstrings zu suchen.

    Das kommt aber immer auf die Programmiersprache an, über die Du uns ja nix erzählt hast.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Hallo Norbert,

    eine Moeglichkeit waere, erst mal das letzte Vorkommen zu finden, etwa so:

    Javascript, Actionscript:  
    foo.lastIndexOf('string')
    
    PHP:  
    strrpos(foo,'string')
    
    Python:  
    string.rfind()
    

    und dann mit substr(ing) oder was aehnlichem den Rest mit dem Ersatzstring zu konkatenieren.

    Gruss

    Dieter

    1. Hallo Ihr beiden,
      ich hatte - wie der Titel sagt - an einen regulären Ausdruck gedacht.
      Gruß
      Norbert

      1. Hallo Norbert

        ich hatte - wie der Titel sagt - an einen regulären Ausdruck gedacht.

        Im allgemeinen ist es vorzuziehen, ein Problem mit Stringfunktionen zu loesen, wenn das problemlos geht.

        Aber ok, wenn du einen RegExp willst, muesstest du etwas konkreter werden, vllt. mit einem Beispiel, die Programmiersprache waere moeglicherweise auch hilfreich.

        Gruss

        Dieter

        1. Hallo Dieter,
          hier ein Beispiel:

          Aus

          aaaaaa-bbbbb-cccccc-dddddd
          aaaaaa-vvvvvvv
          aaaaaaaaaa-bbbbbbb-cccccccc-dddddddd-eeeeeeeee

          soll werden

          aaaaaa-bbbbb-cccccc#dddddd
          aaaaaa#vvvvvvv
          aaaaaaaaaa-bbbbbbb-cccccccc-dddddddd#eeeeeeeee

          d.h. ein "-" soll ersetzt werden durch ein "#" aber nur wenn es das letzte (oder einzige) ist in einer Zeile.

          Gruß
          Norbert

          1. Hi,

            Aus

            aaaaaa-bbbbb-cccccc-dddddd
            aaaaaa-vvvvvvv
            aaaaaaaaaa-bbbbbbb-cccccccc-dddddddd-eeeeeeeee

            soll werden

            aaaaaa-bbbbb-cccccc#dddddd
            aaaaaa#vvvvvvv
            aaaaaaaaaa-bbbbbbb-cccccccc-dddddddd#eeeeeeeee

            d.h. ein "-" soll ersetzt werden durch ein "#" aber nur wenn es das letzte (oder einzige) ist in einer Zeile.

            $text = 'aaaaaa-bbbbb-cccccc-dddddd  
            aaaaaa-vvvvvvv  
            aaaaaaaaaa-bbbbbbb-cccccccc-dddddddd-eeeeeeeee';  
              
            $lines = explode("\n", $text); // ggf zu beachten: Zeilenumbruchzeichen systemabhängig!  
              
            foreach($lines as &$line) {  
              if(false !== $pos = strrpos($line, '-')) {  
                $line[$pos] = '#';  
              }  
            }  
              
            $text = implode("\n", $lines);
            

            No regexp required.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      2. Hi!

        ich hatte - wie der Titel sagt - an einen regulären Ausdruck gedacht.

        Warum? Stringfunktionen sind in der Regel der RegExp-Maschinerie vorzuziehen. Bei einem Regexp kommt es drauf an, ob du nur einzelne Zeichen (auch mehrere lose) oder eine Zeichenkette suchst. Bei einem Zeichen ist das noch vergleichsweise einfach. Finde das Zeichen, gefolgt von allem was nicht dieses Zeichen ist, davon beliebig viele, gefolgt vom Stringende. Bei einer Zeichenfolge hilft eine negative Lookahead-Assertion.

        Lo!