Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_replace problem

Einklappen

Neue Werbung 2019

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

  • Prometheus
    hat ein Thema erstellt preg_replace problem.

    preg_replace problem

    Hallo Euch allen, ihr habt in gutes forum aufgebaut, was mir das eine oder andere Mal ein nuetzlichen Hinweis geben konnte, weshalb ich mich bisher auch nicht registriete, da meine Fragen auch so beantwortet wurden.
    Jetzt bin ich an meine Grenzen gestossen und versuche seit Tagen einen regulaeren Ausdruck zu erstellen, der mir folgendes umwandeln sollte:

    "(two words)" in "\two words".

    Ich versuchte es auf alle erdenklichen Weisen, auch mit verschiedenen Bedingungen, bin aber zu keinem vernuenftigen Ergebnis gekommen. Meine aktuelle Versuchsvariante ist diese:
    Code:
        
        
        
    
    
    PHP-Code:
    $string="(two words)"; $test preg_replace("/\([^.*]\)/","\\",$string); 
    Es waere schoen, wenn mir jemand helfen koennte.

    Viele Gruesse Prometheus

  • Zergling-new
    antwortet
    Natürlich StarCraft-Spieler, zock noch wöchentlich im Battle.Net. Hab da mit einem Account mittlerweile auch schon knapp 3500 Games aufm Buckl.

    Also zu regulären Ausdrücken nochmal:
    Geh das Problem mal Schritt für Schritt an. Probier erstmal diese Schnipsel mit regulären Ausdrücken zu erkennen

    var_dump(preg_match($regexpression, $string));

    Schnipsel:
    PHP-Code:
    <?php
    $string 
    "()";
    $string "genaudieseswort"// ok etwas sinnlos ;)
    $string "genaudiese zweiwoerter";
    $string "irgendeinwort"// Wörter variabel, z.B. [a-zA-Z_]
    $string "irgendwelche woerter";
    $string "(genaudiese zweiwoerter)";
    $string "(irgendwelche woerter)";
    ?>
    Schreib dann hier mal, an welchem String du mit welchem regulären Ausdruck scheiterst. Wenn dann später die Erkennung klappt, ist das Ersetzen ein Kinderspiel.

    Siehe auch:
    http://de.wikipedia.org/wiki/Regul%C...Ausdr%C3%BCcke

    Einen Kommentar schreiben:


  • Prometheus
    antwortet
    Genau das gibt der Parser als Ausgabe zurueck.

    Ich versuche es mal weiterhin �ber ein definierte Bedingung wie (?(?!bedingung)true|false). Sollte ich irgendwann Erfolg haben, werde ich das Ergebnis posten. Danke fuer Deine Hilfe Zergling(oder besser Starcraft-Spieler?).

    Prometheus

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Zitat von Prometheus
    immmer "\" oder nur "\" ohne die Referenz "\1".
    Was meinst du?

    Einen Kommentar schreiben:


  • Prometheus
    antwortet
    @Zergling:

    Dann ersetz jedes Wort doch mal durch ein (.*)
    Hab ich getan, das Ergebnis ist bspw. bei dieser Variante: "/\((.*)(\s(.*))?\)/" immmer "\" oder nur "\" ohne die Referenz "\1".

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Lies dir mal nen RegExp Tutorial durch, weil 2 Wörter in einer Klammer zu erkennen ist wirklich ein Anfängerproblem.

    Hat meine Lösung denn ohne Abänderung funktioniert? Dann ersetz jedes Wort doch mal durch ein

    (.*)

    Alle geklammerten Muster kannst du mit \1 \2 etc. entsprechend der Reihenfolge, im 2. Parameter wieder verwenden.

    Einen Kommentar schreiben:


  • Prometheus
    antwortet
    @Zergling: danke fuer die Antwort, aber Dein Vorschlag geht leider auch nicht. Hab ihn getestet und versucht ein wenig zu variieren, aber kein Ergebnis.

    Dein preg_replace() ergibt garkeinen Sinn
    Danke fuer diesen Hinweis, denn mit [^.*] habe ich eigentlich versucht, dass, was zwischen den runden Klammer steht, aus der Ueberpruefung rauszuhalten, um es am Ende nach dem fuer die Klammern eingesetzten Backslash ranzuhaengen.

    Prometheus

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Dein preg_replace() ergibt garkeinen Sinn,
    [^.*]
    bedeutet, dass garkein Zeichen vorkommen darf, ^ innerhalb von [] bedeutet Negation, und .* jedes mögliche Zeichen.
    \t ist übrigens das Tabulator-Steuerzeichen..

    Du willst also runde Klammer "two words" runde Klammer zu in Backslash "two words" umwandeln?

    PHP-Code:
    <?php
    $string 
    "(two words)";
    $test preg_replace("/\((two words)\)/""\\\1"$string);
    ?>
    Ungetestet.

    Edit: Oder 2 Wörter eben?

    Einen Kommentar schreiben:

Lädt...
X