Reguläre Ausdrücke - wie alles zwischen { und } aussuchen?

  • Themenstarter Themenstarter ByeBye 8492
  • Beginndatum Beginndatum
B

ByeBye 8492

Moinsen,

bin gerade dabei RegExps zu lernen, nun bin ich wohl an meine Grenzen gestoßen, denn ich krieg es nicht hin, das er mir aus einem String mittelns
preg_match_all, alle Matches raussucht, wo ein Text ( irgendeiner) zwischen zwei geschweiften Klammen steht.

also zum Beispiel: {inhalt} {bild02}, dies soll er dann aus dem String bzw. Template File auslesen und und ersetzen, mittels einer For schleife, aber ich kriege es nicht hin die { inhalt } auszufiltern *heul*.
 
PHP:
<?php
$text = "Text der geparst werden soll";
preg_match_all("/({.*?})/", $text, $results);
for($i=0; $i<count($results[1]);$i++) {

  /* Ersetzen der Matches */

}
?>
 
Zuletzt bearbeitet:
Das Fragezeichen ist überflüssig, behaupte ich mal. * steht für Null oder mehr Elemente, da ist das optionalisieren nicht erforderlich. :)
 
Moinsen,
habe gestern Abend noch das hingekriegt:

preg_match_all("/{[a-zA-Z0-9]*}/", $to_parse, $parse_vars);

Das geht auch, werde mal das andere ausprobieren :).

Wenn ich es richtig verstehe, werden bei den sachen wenn er im Text ein {}

Die ist der zu parsender {text} .

Dann nimmt er den gesamten eintrag also {}, oder? Wie kann man es hinkriegen, das er nur das nimmt was innendrinne steht, in dem Fall also "text"?


EDIT: Wieso hast du nacher in der Forschleife $result[1]? Ich habe da $result[0] und das geht auch, wo liegt da der unterschied?
 
Zuletzt bearbeitet von einem Moderator:
PHP:
<?php
$text = "Text der geparst werden soll";
preg_match_all("/({.*?})/", $text, $results);
for($i=0; $i<count($results[1]);$i++) {

  /* Ersetzen der Matches */

}
?>
Hier wir alles, einschliesslich der Klammern, geparst - wie du bereits gesagt hast.

PHP:
<?php
$text = "Text der geparst werden soll";
preg_match_all("/{(.*?)}/", $text, $results);
for($i=0; $i<count($results[1]);$i++) {

  /* Ersetzen der Matches */

}
?>
Hier nur das, was von den Klammern umschlossen ist. Hol dir doch mal den RegEx Coach. Damit kannst du probieren, wie sich unterschiedliche Klassen, Quantifier, Modifiere auf deine Problemstellung auswirken. Ausserdem gibts hier auch ein nettes Tutorial von Tim Comanns zu RegExes.
 
stanleyB hat gesagt.:
Ausserdem gibts hier auch ein nettes Tutorial von Tim Comanns zu RegExes.


Das Tutorial hab ich schon gemacht, damit kam ich dazu was ich bisher hatte, hat mir gut gefallen :).

Öhm bei mir machen die beiden verschiedenen Sachen keinen Unterschied in meinem Script.

Beide liefern das Ergebnis inklusive Klammer ab.
 
Zuletzt bearbeitet von einem Moderator:
Folgendes wird deine Fragen wohl verdeutlichen:
PHP:
<?php 
$text = "Text der {geparst} werden {soll}"; 
preg_match_all("/{(.*?)}/", $text, $results); 

print "<pre>";
print_r($results);
print "</pre>";
?> 

/**
* Ausgabe:
* Array
* (
*     [0] => Array
*         (
*             [0] => {geparst}
*             [1] => {soll}
*         )
*
*     [1] => Array
*         (
*             [0] => geparst
*             [1] => soll
*         )
* 
* )
**/
 
Zurück