[PHP] Ereg bereik verkorten ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heeft iemand enig idee hoe ik het bereik van een ereg kan verkorten ? Zo heb ik bijvoorbeeld een HTML pagina met de volgende inhoud:

code:
1
2
3
4
5
6
7
8
9
<body>
{{administrator}}
HTML HTML HTML HTML
{{administrator}}
Hier staat bijvoorbeeld een tekstje..
{{administrator}}
Nog meer HTML
{{administrator}}
</body>

En ik wil alle blokken {{administrator}} verwijderen, dit doe ik met een functie genaamd removeBlock(), deze ziet er als volg uit:
PHP:
1
2
3
4
5
6
function removeBlock($block)
{
$block = "{{" . $block . "}}";
$this->temp = ereg_replace("($block)(.*)($block)", "", $this->temp);
$this->temp = ereg_replace("($block2)", "", $this->temp);
}

Ik roep de functie aan, removeBlock("Administrator"), maar als ik dat doe verwijderd die vanaf de eerste {{administrator}} tot de allerlaatste {{administrator}} , dus hou ik alleen nog maar over. Maar ik wil dat het eerste blok {{administrator}}-{{administrator}} wordt verwijderd en het laatste blok {{administrator}}-{{administrator}}, maar niet de tekst daar midden in. Iemand enig idee ? :)

[ Voor 11% gewijzigd door justmental op 19-07-2003 09:26 . Reden: Daar hebben we allemaal mooie tags voor :) ]


Acties:
  • 0 Henk 'm!

  • Freak_NL
  • Registratie: Juli 2000
  • Laatst online: 22-08 14:17
Volgens mij was de "greedy" modifier daar voor bedoelt bij reguliere expressies:

php.net

Je regex wordt dan iets in de vorm van "/($block)(.*)($block)/U"

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks voor je antwoord Freak_NL maar ik heb mijn ereg aangepast maar werkt nog niet helaas..

Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat Freak_NL doelde op preg_replace ? ;)

Dus iets in deze trend:
PHP:
1
2
3
4
<?php
$block = 'administrator';
$file = preg_replace('/{{'.$block.'}}/','',$file);
?>

[ Voor 14% gewijzigd door Verwijderd op 19-07-2003 06:44 ]


Acties:
  • 0 Henk 'm!

  • mjax
  • Registratie: September 2000
  • Laatst online: 17:55
Zover ik weet zijn de ereg_* functies altijd greedy. Bij preg_* functies kun je greediness schakelen met de algemene optie U (achter de laatste slash). Hiermee draai je de greediness van de operators om. Je kunt in de expressie zelf ook bepaalde operators non-greedi maken, door er een ? achter te zetten.

Bij. preg_match("/($block)(.*?)($block)/", .......

Acties:
  • 0 Henk 'm!

  • Freak_NL
  • Registratie: Juli 2000
  • Laatst online: 22-08 14:17
Oeps, mijn fout. :) Voor de leukere regex truukjes moet je inderdaad de preg_* functies gebruiken. (en dan doet de ungreedy modifier wel precies wat je wilt)
Pagina: 1