login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Reguliere expressies

Offline beckers - 04/07/2006 19:32 (laatste wijziging 04/07/2006 19:33)
Avatar van beckersNieuw lid Ik zou met PHP een bestand inlezen en dan voor tags scannen voorbeeld: [titel]Een voorbeeldtitel[/titel]. Nu ik heb het gedaan met verschillende string-functies, maar dat is te gecompliceerd. Hoe moet ik dit met reguliere expressies doen. Een voorbeeldcode:
  1. <?php
  2. $bestand=file_get_contents ("bestand.txt");
  3. preg_match("de reguliere expressie", $bestand, $titels);
  4. ?>

Hoe moet die reguliere expressie eruitzien als de tag er zo uitziet?
[titel]Een voorbeeldtitel[/titel]

8 antwoorden

Gesponsorde links
Offline Richard - 04/07/2006 19:35
Avatar van Richard Crew algemeen
  1. '~\[titel](.*?)\[/titel]~si'


de ~ is de delimiter, gewoon persoonlijke voorkeur van mij, meeste mensen gebruiken / of #

www.regular-expressions.info voor informatie over regexes 
Offline beckers - 04/07/2006 19:36
Avatar van beckers Nieuw lid Bedankt:D
Offline Bart - 04/07/2006 19:37
Avatar van Bart PHP expert Volgens mij moet je die niet doen met preg_match() want die retourneert alleen maar TRUE en FALSE.
De functie die jij wilt is: preg_replace().

Gaat als volgt:
  1. <?php
  2. $tekst = preg_replace("#\[title\](.*?)\[/title\]#i","<u>\\1</u>", $tekst);
  3. ?>
Offline b4nkr0bz0r - 04/07/2006 19:39
Avatar van b4nkr0bz0r PHP gevorderde Klopt niet, volgens mij retourneerd preg_match(); een array, met alle resultaten die overenkomen tussen de string, en het patroon.

Offline Richard - 04/07/2006 19:43
Avatar van Richard Crew algemeen klopt ook niet;-)

preg_match returnt 1 of 0, hangt ervanaf of hij een resultaat vindt. preg_match heeft 4 parameters, 2 verplicht, waarvan de 3e een reference kan zijn naar een variabele waarin je de match op wil slaan. Daarmee krijg je de resultaten terug;-)
Offline beckers - 04/07/2006 19:47 (laatste wijziging 04/07/2006 19:48)
Avatar van beckers Nieuw lid Ik heb een werkende code gevonden:
  1. <?php
  2. $titels_per_regel=array();
  3. $tekst = file('tekst.txt');
  4. foreach($tekst as $regel){
  5. preg_match('~\[titel](.*?)\[/titel]~si',$regel,$titels_per_regel);
  6. if (count($titels_per_regel)!==0){
  7. print_r(array_pop($titels_per_regel));
  8. echo '<br />';
  9. }
  10. }
  11. ?>
Offline GeForceX2 - 05/07/2006 18:23
Avatar van GeForceX2 Nieuw lid Werkt deze dan?
Bij mij tochniet...:s
Offline beckers - 05/07/2006 19:27 (laatste wijziging 06/07/2006 19:52)
Avatar van beckers Nieuw lid Dit is de volledige functie: gewoon ob_start("titels") en flushen. En natuurlijk deze pagina includen.
  1. <?php
  2. function titels($buffer){
  3. $tekst=explode("\n",$buffer);
  4. foreach($tekst as $regel){
  5. if(preg_match('~\[titel](.*?)\[/titel]~s',$regel,$titels_p_r)){
  6. $i=1;
  7. while($i<count($titels_p_r)){
  8. $titels[]=$titels_p_r[$i];
  9. $i+=2;
  10. }
  11. }
  12. }
  13. if (count($titels)>0)
  14. $titel=array_pop($titels).' - Mijn Site';
  15. else
  16. $titel='Mijn Site';
  17. $head='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  18. <html xmlns="http://www.w3.org/1999/xhtml">
  19. <head>';
  20. $head.= "\n<script language=\"javascript\">document.title=\"".$titel."\"</script>\n";
  21. return $head.preg_replace('~\[titel](.*?)\[/titel]~s','',$buffer);
  22. }?>
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.348s