screamfine Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Hallo! Kann mir jemand erklären wie ich dynamisch Werte / Variablen / Strings wie ich sie unten aufgelistet habe, durch einen einfachen '-' zu ersetzen ? (mit php) Also nur zur Info, die Variablen / Strings kenne ich nicht vorher, da sie jedesmal verschieden sein können (das ist ja die Schwierigkeit an der Sache!): z.bsp: @@@testtest@@@ oder @@@bla111blabla11122@@@ oder @@@1_vorname@@@ oder @@@5_strasse@@@ etc. usw. Und nun möchte ich diese einzelnen Strings quasi mit einem einfachen '-' ersetzen. Da sie jedoch variieren und ich die Länge der Strings nicht sagen kann, kann ich ja auch kein einfaches str_replace einsetzen... oder???? Man müsste quasi ein script haben, dass nach dem hier sucht: '@@@' (jeweils am Anfang und am Ende eines Strings) und diese @'s und den Text der dazwischen steht (dessen Länge variiert), ersetzt. Bitte helft mir DANKE IM VORAUS !!!! Zitieren
kathi008 Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 hi, ich verstehe nicht ganz, was du willst.:confused: Willst du nur die'@@@' ersetzen? Dann kannst du ja str_replace() benutzen. Diese Funktion brauch keine Stringlänge. Die ersetz einfach alle '@@@' durch dienen String. str_replace('@@@','dein String',$string); Die Länge des Strings bekommst du mit strlen(). Zitieren
screamfine Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 nein nein, ich möchte das komplette teil ersetzen: @@@variabler_text_kann_beliebig_lang_sein@@@ ersetzen durch: '-' ich hoffe du verstehst jetzt was ich meine ?! Zitieren
Florian_K Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Mahlzeit! Zunächst tust du den Text, der bearbeitet werden soll in eine Variable, meinetwegen $text. Dann nehmen wir die Methode pre_replace(). Die Syntax ist preg_replace($patterns, $replace, $text). Für deine Ansprüche müsste es also heissen: preg_replace("@@@.*@@@", "-", $text); Danach hast du statt der beschriebenen (seltsam markieren) Strings einfache "-". Wenn der String nur allein in einer Zeile vorkommen kann/darf, dann geht das: preg_replace("^@@@.*@@@$", "-", $text);Das "Dach" bezeichnet den Anfang einer Zeile, das "$" das Ende. Mit Regulären Ausdrücken kann man aber noch unendlich mehr. Such mal nach nem guten Tutorial (zum Bleistift bei Google [suchbegriffe schon im Link drin!]) Tschö, Florian Zitieren
robotto7831a Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Hallo, ich mache das immer so. $beitrag = eregi_replace("\\[@@@]([^\\[]*)\\[@@@\\]","ersetzter string",$beitrag);[/PHP] So in der Art müsste das funktionieren. Dann wird alles zwischen [@@@] und [@@@] ersetzt. Frank Zitieren
kathi008 Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 hi, wenn ich jetzt richtig verstanden habe, soll es danach so aussehen: '-' oder? Wozu dann der ganze Aufwand???? Warum machst du dann nicht einfache Zuweisung? $text = '-';:confused: Zitieren
Florian_K Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 Originally posted by palvoelgyi ich mache das immer so.$beitrag = eregi_replace("\\[@@@]([^\\[]*)\\[@@@\\]","ersetzter string",$beitrag); Hallo Frank! Die Zeichen in den eckigen Klammern werden als Menge gesehen. Wenn du also [123] suchst findet er "123" und "321" und "213". Wofür steht das "([^\[]*)" eigentlich? Meine Interpretation ist: eine Menge bestehen aus "^\[", also am Anfang der Zeile mit "[" beginnend, und das in beliebiger Folge ("*"). Bin leicht verwirrt, Florian PS: @ Kathi: Stimmt! *lol* Den ganzen Text auf "-" reduzieren! -- Naa, ich geh mal davon aus, dass es auch Zeilen in dem Text geben soll, die nicht ersetzt werden sollen. Zitieren
kathi008 Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 hi, der Asdruck [^abc] steht für nicht abc. Also nehme ich an, dass bei dem Asdruck [^\[] str_replace() alles ersetzen wird. oder:confused: Zitieren
Florian_K Geschrieben 13. Februar 2003 Geschrieben 13. Februar 2003 *blatsch* Stimmt! Die Bedetung vom ^ hatte ich verdrängt. Wie stehts denn jetzt mit der Lösung des Problems? Fehlt noch was? Zitieren
screamfine Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 Nun, es klappt leider noch nicht. Dazu kurz zu dem Sinn und was das Ganze überhaupt soll: Ich bekomme von einem PDF-Formular Daten / Variablen, die mein PHP-Script empfängt und weiterverarbeitet. Ich habe in meiner Datenbank ein Feld 'body', in welchem der Text steht, der später per eMail versendet wird. In diesem Text hat man die Möglichkeit Variablen anzugeben, so könnte also der Inhalt des Tabellenfeldes 'body' aussehen: -------------------------------------------------------------------------------------------- Hallo @@@vorname@@@ @@@nachname@@@ Wie geht es Dir? Du hast im PDF-Formular folgende Angaben gemacht: Alter: @@@alter@@@ Strasse: @@@strasse@@@ -------------------------------------------------------------------------------------------- So, da nun leider Gottes das PDF-Formular die NICHT AUSGEFÜLLTEN Eingabefelder (genauergesagt die Checkboxen, bei Eingabefeldern kommt wenigstens der Feldname an ) ÜBERHAUPT NICHT übermittelt (nicht einmal der Name des Feldes wird gesendet, geschweige denn der Wert) werden, MUSS ich diese nicht von meinem PHP-Script ersetzten Variablen wie z.Bsp. @@@alter@@@ entsprechend durch ein '-' Zeichen ersetzen. (Übrigens: Die somit zusammengesetzten Daten werden per eMail an den Benutzer verschickt) So ich habe das hier auch eingefügt: $pdfform_body = eregi_replace("\@@@([^\[]*)\@@@","-",$pdfform_body); Er ersetzt aber NUR das erste im Text / Template vorkommende @@@variabler_name@@@, auf das obige Beispiel bezogen würde das also heissen, er ersetzt NUR @@@alter@@@ und alle nachfolgenden @@@strasse@@@ werden einfach gelöscht, bzw ersetzt durch " " (kein Wert). Muss ich irgendwas mit ner Schleife machen ???? Danke schon mal für eure Hilfe !!!! Zitieren
screamfine Geschrieben 13. Februar 2003 Autor Geschrieben 13. Februar 2003 Originally posted by Florian_K Für deine Ansprüche müsste es also heissen: preg_replace("@@@.*@@@", "-", $text); Danach hast du statt der beschriebenen (seltsam markieren) Strings einfache "-". Wenn der String nur allein in einer Zeile vorkommen kann/darf, dann geht das: preg_replace("^@@@.*@@@$", "-", $text);Das "Dach" bezeichnet den Anfang einer Zeile, das "$" das Ende. DAS GEHT NICHT! ES KOMMT EIN FEHLER: "Warning: No ending delimiter '^' found in ... " !!! Zitieren
screamfine Geschrieben 14. Februar 2003 Autor Geschrieben 14. Februar 2003 Hui! Also ich glaube ich hab die Lösung: $text = preg_replace("/@@@(.*)@@@/iUs", "-", $text); Fragt mich jetzt aber NICHT was das zu bedeuten hat, verstehen tu ich's nicht aber es funktioniert Danke euch allen :bimei Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.