[php] preg_replace prob

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mensen,

Ik heb een probleempje met preg_replace waar ik niet uitkom.

In een eerste versie van een parser heb ik tags als {URL} laten vervangen door bijv een url. Nu wil ik dit uitbereiden met een language parser. Dus bijv. {INTRO_TEKST} vervangen door een taalafhankelijke tekst.

Daartoe dacht ik om eerst de algemene tags te laten vervangen en daarna de taalafhankelijke, de akgemene voeg ik in mijn script toe (document->insert("url","http://www.tweakers.net"); De taalafhankelijke staan in een file opgesomt ($lang['intro']="hallo ...");

PHP:
1
2
3
4
5
//eerst algemene tags als URL en PATH enzo
$file = preg_replace("/{(.*?)}/e", '$this->data["$1"]', $file); 

Daarna de taalafhankelijke teksten
$file = preg_replace("/{(.*?)}/e", '$this->lang_content["$1"]', $file);


Nu loop ik echter tegen het probleem aan dat in de eerste replace een {..} tag wordt gevonden en dat deze vervangen wordt door een lege string. Hierdoor kan hij door de tweede preg_replace niet meer gevonden worden.

Kan iemand mij op het goede spoor zetten om dit probleempje op te lossen?

Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Zou je hier niet beter preg_match_all voor kunnen gebruiken. En daarna pas een preg_replace.

[ Voor 14% gewijzigd door dArtagnan op 03-11-2003 21:43 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
ik zou gettext gebruiken voor de language gerelateerde strings.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OK ik heb het nu als volgt gedaan:

Met preg_match_all alle taalafhankelijk tags geisoleerd en deze in de preg_replace queue gezet zodat ik met een enkele preg_replace alle tags kan vervangen. Dit is de code:

PHP:
1
2
3
4
5
6
7
8
9
10
preg_match_all("/{(\w+)}/",$file,$match_a);
foreach($match_a[1] as $loop)
{
     if($this->lang_content[$loop]!="")
     {
          $this->insert($loop,$this->lang_content[$loop]);
     }
}

$file = preg_replace("/{(.*?)}/e", '$this->data["$1"]', $file);


Hij lijkt tot nu toe te werken, op en/of aanmerkingen en tips hoor ik graag.
tot zover bedankt.