• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage String zwischen zwei Strings

Aaron3219

Senior HTML'ler
Hey Forum,

also das Problem steht eigentlich schon im Titel:
Ich habe hier folgenden String:
"[bla]Textawdawd[/bla]"
und möchte jetzt den Text dazwischen raus haben.

Alles kein Problem:
PHP:
$meinString = '[bla]Textawdawd[/bla]';

function get_string_between($string, $start, $end) {
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) {
        return '';
    }
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

echo get_string_between($meinString, '[bla]', '[/bla]');
(Modifiziert aus: https://stackoverflow.com/questions/5696412/how-to-get-a-substring-between-two-strings-in-php)

Mein Problem besteht darin, dass der String aber auch so aussehen kann:
'[bla]Textawdawd[/bla] Noch mehr Text [bla]AndererText[/bla]';

Jetzt muss einmal 'Textawdawd' & 'AndererText' ausgelesen werden und in ein Array eingelesen werden.
Und das ist meine Frage: Wie mache ich das?
 
:confused: Ich ärger mich gerade so ein bisschen, dass ich da so viel Zeit investiert habe... Ich muss unbedingt wieder mehr PHP machen.
Wie auch immer, hier ist der Code:
PHP:
$string = "[bla]awdawd[/bla]awd[bla]awdawd[/bla]";

preg_match_all('/\[bla\](.*?)\[\/bla\]/s', $string, $matches);
print_r($matches[1]);

Danke Tronjer für das Stichwort und falls dir noch was auffällt, dann sagen.
 
Ich bins doch nochmal.

Ich glaube, ich geb nochmal ein bisschen mehr Hintergrundinformationen, vielleicht fallen euch noch ein paar andere Wege ein:
Also in diesen Strings steht in den Tags ein Tablename für eine mysql Tabelle.
à la:
Code:
/* Tabelle:
*  beispielcolumn      andere_beispielcolumn
*  Wert1               Wert2
*  Wert1_1             Wert2_1
*  usw.                usw._2
*/


$tablename = 'beispieltabelle';
$string = '[column]beispielcolumn[/column] Hier steht dann noch mehr Text [column]andere_beispielcolumn[/column]';


preg_match_all('/\[column\](.*?)\[\/column\]/s', $string, $matches);
/* $matches[1] sieht dann so aus:
*  Array ( [0] => beispielcolumn [1] => andere_beispielcolumn )
*/

$sql = "SELECT * FROM $tablename";
$result = $conn->query($sql);

while ($row = $result->fetch_assoc()) {
   echo '<option>'./* Hier ist die Problemstelle */.'</option>';
}

Als output möchte ich dann folgendes haben:
HTML:
<option>Wert1 Hier ist dann noch mehr Text Wert2</option>
<option>Wert1_1 Hier ist dann noch mehr Text Wert2_1</option>
<option>usw. Hier ist dann noch mehr Text usw._2</option>

Ich habe versucht mit preg_replace zu arbeiten, aber er replacet dann ja alles was in den Tags steht mit nur einem Wert, sodass dann rauskommt:
HTML:
<option>Wert1 Hier steht dann noch anderer Text Wert1</option>
usw.

Wie kriege ich also den gewünschten Output hin?
 
Ja du hast es (fast) richtig verstanden, ich habe vergessen zu erwähnen, dass der $string natürlich variiert.
Stell dir vor, du müsstest deinen String in einen <input> eingeben.
Er könnte auch so aussehen:
Hier steht [column]beispielcolumn_3[/column] dann noch mehr Text [column]andere_beispielcolumn[/column] [column]beispielcolumn[/column]

Was ich bis jetzt hinbekommen habe ist, dass der Text in den Tags (egal wie der String aussieht) in ein Array eingelesen wird.
Code:
Array ( [0] => beispielcolumn [1] => andere_beispielcolumn )

und zwar auch in der Reihenfolge, bsp.:
Code:
$string = Hier steht [column]Irgendwas[/column] dann noch mehr Text [column]Schönes_Wetter[/column] [column]blabla[/column];
wäre dann:
Code:
Array ( [0] => Irgendwas [1] =>Schönes_Wetter [2] => blabla)

Es müsste also sozusagen das nth match mit dem nth Eintrag vom Array replaced werden.
Hört sich für mich wie eine Schleife an:
PHP:
for ($y = 0; $y <= sizeof($array_name) - 1; $y++) {}
Aber genau soweit war ich auch schon.

In dem Falle müsste ich also das $y-te Match mit dem $y-ten Eintrag vom Array ersetzen.
Also:
Code:
$string = Hier steht [column]Irgendwas[/column] dann noch mehr Text [column]Schönes_Wetter[/column] [column]blabla[/column];

wird zu:

Hier steht $row['Irgendwas'] dann noch mehr Text $row['Schönes Wetter'] $row['blabla']

Edit:
Mir ist gerade eingefallen, dass man ja theoretisch einfach nur
[column] durch $row['

und [/column] durch ']

ersetzen müsste.
Das geht wiederum nicht, da ja $row[' als Fehlermeldung (bei Anführungszeichen) und als String (bei Apostroph) gehandelt werden würde.
Gibts da einen Weg das zu verhindern?

PHP:
preg_replace('/\[column\]/s', "$row['", $string);

preg_replace('/\[\/column\]/s', "']", $string);
 
Zuletzt bearbeitet:
Zurück
Oben