Ankündigung

Einklappen
Keine Ankündigung bisher.

Text zwischen zwei Zeichen löschen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Text zwischen zwei Zeichen löschen

    Hallo
    Ich hänge wieder mal an einem "Detail?" beim Ersetzen mit dem "pattern" von preg_replace - ist aber auch kompliziert
    Alles was zwischen den "~" ist möchte ich löschen - und schön wäre es noch, wenn es auch eine Lösung geben würde wenn nur am Ende ein solches Zeichen steht.
    Im $txtn möchte ich also nur "und so weiter".
    PHP-Code:
    $text="~*Corrected Coordinates: N 49° 02.463 E 14° 25.180*~ und so weiter";
    $text="Lösung*~ und so weiter";
    $txtn=preg_replace('/*~+?~*/','',$text); 

  • #2
    Moin moin,
    und schön wäre es noch, wenn es auch eine Lösung geben würde wenn nur am Ende ein solches Zeichen steht.
    Dann musst du aber erst erzählen, wie das Ergebnis dieser Lösung dann aussehen sollte.

    Sollen die ~ ebenfalls gelöscht oder behalten werden?
    Was ist wenn nur ein einzelnes ~ in der Mitte steht?
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      und schön wäre es noch, wenn es auch eine Lösung geben würde wenn nur am Ende ein solches Zeichen steht
      Du kannst das erste ~ alternativ machen -> mit dem ? Zeichen

      Ansatz zum Spielen: https://regex101.com/r/8SpD9E/1/

      Hab das Leerzeichen optional hinten auch mitgenommen, kannst du auch weglassen und einen trim() drauf machen. Hängt halt dann im Detail ab, was du damit machen willst.

      Hier ohne Leer: https://regex101.com/r/8SpD9E/2/


      Theoretisch kannst du auch nur das finden lassen was nach dem letzten ~ kommt, das geht sogar auch ohne Regex mit strpos() und substr().
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Danke für die Express-Meldung
        Die Zeichen "~" möchte ich nicht ... und wenn ein einzelne vorhanden ist den linken Teil (inklusive "~") weg.

        Kommentar


        • #5
          SUPER hausl - mit /~?.+~ ?/ funktioniert es - Danke!

          Kommentar


          • #6
            Aber auch so, oder? Ganz ohne Regex.. man sucht das "rechteste/letzte" ~ und von da weg einfach nur den Rest ausgeben/übrig lassen.

            PHP-Code:
            $s '~*Corrected Coordinates: N 49° 02.463 E 14° 25.180*~ und so weiter';

            $dashPos strrpos($s'~');
            echo 
            substr($s$dashPos 2);

            // und so weiter 
            oder mit explode()
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Der Regex für "zwischen ~ inkl. ~" ist
              Code:
              ~(.*)~
              Für den Fall, dass nur ein ~ vorkommt würde ich einfach explode nutzen.
              PHP-Code:
              <?php

              $text 
              "test ~*Corrected Coordinates: N 49° 02.463 E 14° 25.180*~ und so weiter ~ und so fort~ mal zwei";
              $txtn preg_replace('/~(.*)~/mU','',$text);

              echo 
              $txtn;
              echo 
              PHP_EOL;

              $text "test *Corrected Coordinates: N 49° 02.463 E 14° 25.180* und so weiter  und so fort mal zwei~";
              var_dump(explode('~'$text));
              Explode gibt ein Array zurück, wenn es genau 2 Einträge enthält, kannst du den ersten davon wegwerfen und den zweiten behalten.
              Wenn es mehr als 2 Einträge enthält kannst du den Regex nutzen.

              Was passiert wenn du z.B. 3 mal ~ hättest?
              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

              Kommentar

              Lädt...
              X