PHP: Unbekannten Text auslesen und ersetzen

Wenn auf einer zu erstellenden PHP-Seite der Text [cc_pm_111119230600] steht, wird dieser mit einem Text ersetzt, den ich in einer Funktion übergebe.

Hier der Quellcode dazu:

Zitat:
function bannerauktion($file)
{
$bannerauktion = „Dieser Text kommt aus der Funktion“;
return("$bannerauktion");
}

$bannerauktion = bannerauktion($cid,$lid,$file); // Variable $bannerauktion mit Ergebnis aus der Funktion „bannerauktion“ füllen

$file = str_replace("[cc_pm_111119230600]",$bannerauktion,$file); // Platzhalter [cc_pm_111119230600] mit Ergebnis aus der Funktion „bannerauktion“ füllen

Nun bräuchte ich für folgendes Problem eine Lösung:

Der Text „[cc_pm_“ ist immer gleich, die Zahl dahinter ist immer unterschiedlich. (Jede Werbefläche erhält eine individuelle ID-Nummer)

Ich möchte jetzt irgendwie in der PHP-Seite nach „[cc_pm_“ suchen und die gesamte Zeichenfolge von der ersten eckigen Klammer bis zur letzten eckigen Klammer an eine Variable übergeben. Die eckigen Klammern sollen jedoch NICHT an die Variable übergeben werden.

Die Anzahl der Ziffern kann immer gleich sein, wenn dies die Sache vereinfacht. Eine „flexiblere“ Lösung wäre jedoch, alles auszuwerten, was zwischen „[“ und „]“ steht, egal, wie lang die Zeichenfolge ist, solange sie mit „[cc_pm_“ beginnt.

Ist das möglich, und wenn ja: wie?

Hallo,

wie wäre es mit substr? => http://de2.php.net/manual/de/function.substr.php

Hallo, Einstein-Junior!

„Text auslesen“ ?

Es muß sich um einen „Irrläufer“ handeln.
Ich bin kein php-Experte, höchstens ein php-Anwender.
Ich bin im Forum auch nicht als php-Experte aufgeführt.
Tipp: Wenden Sie sich bitte an http://gaijin.at
Dort ist Herr Rumpeltesz php-Spezialist. Ich habe gerade eben mit ihm gemailt.

Freundlichen Gruß
Wolfgang Schmitt

Ist das möglich, und wenn ja: wie?

Was du brauchst sind reguläre Ausdrücke.
Das ist ein recht umfangreiches und komplexes Gebiet, aber auch sehr mächtig.
Ich empfehle dir, das Tutorial auf http://tut.php-quake.net/de/regex.html anzuschauen, das erklärt den Gebrauch von Regulären Ausdrücken in PHP sehr gut.
Hoffe das hilft dir weiter.

Hallo,

sollte kein Problem sein, wenn ich es richtig verstanden habe.

Den/Die Platzhalter aus einem Text (String) kann mit folgender Funktion gefunden werden:

$txt="Das ist ein Beispieltext mit Platzhalter 1 [cc\_pm\_111119230600]
und anbei noch ein Platzhalter [cc\_pm\_111119230601].";

preg\_match\_all('/\[(cc\_pm\_\d{1,})\]/i', $txt, $match);
print\_r($match);

Array
(
 [0] =\> Array
 (
 [0] =\> [cc\_pm\_111119230600]
 [1] =\> [cc\_pm\_111119230601]
 )

 [1] =\> Array
 (
 [0] =\> cc\_pm\_111119230600
 [1] =\> cc\_pm\_111119230601
 )

)

$txt = Text mit Platzhaltern
$match = enthält alle gefundenen Platzhalter als mehrdimensionales Array. $match[1] enthält dann alle Platzhalter ohne []…

Hoffe dir geholfen zu haben und freue mich auf Feedback.

Grüße
Elsoregro

Hallo,
ja irgend wie habe ich mit der Fragestellung ein Problem. Aber ich bin auch nicht „Einsteins Sohn“.
Bei dem Quellcode beispiel frage ich mich wofür die Variable $file übergeben wird, wenn sie nicht benutz wird.

Zitat:
function bannerauktion($file)
{
$bannerauktion = „Dieser Text kommt aus der Funktion“;
return("$bannerauktion");
}

Zur String untersuchung giebt es verschiedene Funktionen bei denen man den anfang „[cc_pm“ und dann das ende „]“ finden kann.
Hier ein Link dazu.
http://php.net/manual/de/ref.strings.php
Mit freundlichen Grüßen

Hallo!

Mir scheint, deine Frage ist bereits beantwortet. Der entscheidende Hinweis: Regular Expressions. Es lohnt sich, sich darin einzuarbeiten, auch wenn es sehr komplex erscheint!

Wenn noch Fragen offen sind, einfach nochmal nachfragen…

Viel Erfolg,

Lars

Hi,

ich hoffe das ist wonach Du suchst.

Regulärer Ausdruck: ‚[cc_pm_[0*9]*]‘
Das heißt, du suchst nach einem String der mit „[cc_pm_“ beginnt und dann beliebig viele Zahlen hat und mit „]“ endet.

$expression = ‚[cc_pm_[0*9]*]‘;

preg_match_all($expression,$file,$result)
/* $Result ist ein Arry der alle gefunden Treffer enthält. Wobei der erste Eintrah (also $result[0] einen Array aller Treffer enthält. $result[1] die Treffer des ersten Unterausdrucks von $expression.
Mehr dazu findest du wenn du nach dem Begriff „reguläre Ausdrücke“ suchst.*/

Num musst du $result einfach noch durchlaufen und die jeweils den Identifier holen. Un für jeden folgendes machen.

//Zerlege den Ausdruck um an den Identifier zu kommen
$banner = explode("_", $result[0][i]);

//es ist der zweite Eintrag da deine System cc_pm_IDNUMMER ist:
$replace = getReplacement($banner[2]);

//Ersetze den Ausdruck
str_replace($result[0][i], $replace, $file);

Ich hoffe das hilft Dir weiter. Ansonsten einfach nochmal melden.

Viele Grüße,
Mag

sorry - da kann ich momentan leider nicht weiterhelfen