Ga naar inhoud

PHP: (e)regi_replace?


anoniem

Aanbevolen berichten

[code:1:3edad0b19b]<td align=center nowrap><center><span class=toplink><?php print $this->links(link_page()); ?></span></center></td>[/code:1:3edad0b19b] Bovenstaand geeft mij een aantal links welke standaard van elkaar zijn gescheiden door een '|'. Nu wil ik deze '|' vervangen door een '&middot;', zonder dat ik in 5 bestanden de broncode moet gaan wijzigen. Volgens mij kan dit door het $this->links(link_page()) in een eregi_replace() te zetten, alleen hoe ziet dit er dan uit? En welke argumenten moet ik gebruiken? Heb al op php.net gekeken, maar daar wordt ik niet veel wijzer van... Alvast bedankt!
Link naar reactie
[quote:1abe401644="Stefan Nagtegaal"][code:1:1abe401644]<td align=center nowrap><center><span class=toplink><?php print $this->links(link_page()); ?></span></center></td>[/code:1:1abe401644] Bovenstaand geeft mij een aantal links welke standaard van elkaar zijn gescheiden door een '|'. Nu wil ik deze '|' vervangen door een '&middot;', zonder dat ik in 5 bestanden de broncode moet gaan wijzigen. Volgens mij kan dit door het $this->links(link_page()) in een eregi_replace() te zetten, alleen hoe ziet dit er dan uit? En welke argumenten moet ik gebruiken? Heb al op php.net gekeken, maar daar wordt ik niet veel wijzer van... Alvast bedankt![/quote:1abe401644] Volgens mij ziet er zo uit: [code:1:1abe401644] print eregi_replace("([|])","&middot;",$this->links(link_page())); [/code:1:1abe401644] Het werkt in ieder geval met een "gewone" string-variabele, of het met die functie werkt, weet ik niet. Anyway, het komt er op neer dat eregi_replace als eerste de string verwacht die je zoekt, tussen () en []. De tweede parameter is de vervangende string, de derde is de string waarin gezocht moet worden. Ed
Link naar reactie
nou, dat klopt wel, maar is wel erg overdreven.. print eregi_replace("|","&middot;",$this->links(link_page())); is voldoende, al weet ik niet of | bij ereg een speciale betekenis heeft. waarschijnlijk wel en dan zou je er: print eregi_replace("\|","&middot;",$this->links(link_page())); van moeten maken. Maar regular expressions zijn voor geavanceerde zoekopdrachten, niet voor het vervangen van 1 simpel karakter. Daar kun je beter str_replace() gebruiken. Dan wordt het dus: print str_replace("|", "&middot;", $this->links(link_page()));
Link naar reactie
[quote:0e0306e8cf="Jurriaan R"]Maar regular expressions zijn voor geavanceerde zoekopdrachten, niet voor het vervangen van 1 simpel karakter. Daar kun je beter str_replace() gebruiken.[/quote:0e0306e8cf]FF een klein uitstapje naar andere functies: wat is dan precies het verschil tussen str_replace() en strtr(), waar je exact hetzelde resultaat mee kan krijgen? - Basje.
Link naar reactie
[quote:4380b158bf="Jurriaan R"]nou, dat klopt wel, maar is wel erg overdreven.. [/quote:4380b158bf] Ik hou wel van een beetje overdrijven :) [quote:4380b158bf="Jurriaan R"] print eregi_replace("|","&middot;",$this->links(link_page())); is voldoende, al weet ik niet of | bij ereg een speciale betekenis heeft. waarschijnlijk wel en dan zou je er: print eregi_replace("\|","&middot;",$this->links(link_page())); [/quote:4380b158bf] Ik had je eerste optie wel geprobeerd, maar dat ging niet goed. De tweede werkt wel. Heb ik ook weer wat geleerd 8) Ed
Link naar reactie
[quote:0c898f4ce6="Jurriaan R"]bij strtr kan het aantal karakters dat vervangen wordt niet van elkaar verschillen van de vervangterm.[/quote:0c898f4ce6]Da's niet waar, aangezien ik het wel degelijk zo gebruik. Als je namelijk een array maakt met keys en values zoals[code:1:0c898f4ce6]$replace_array = array("aap" => "noot", "ufo" => "vliegende schotel");[/code:1:0c898f4ce6]en je geeft deze vervolgens als tweede argument door aan de functie strtr() dan werkt dat prima. Dus blijft mijn vraag: wat is nou precies het verschil? - Basje.
Link naar reactie
het verschil is dat die functie met de array pas vanaf php 4.0 is ingevoerd. En dat str_replace niet zo'n array kan ontvangen. maar het zijn inderdaad allemaal manieren om een bepaald gedeelte van een tekst te vervangen. Als je meerdere termen wilt vervangen, gebruik je strtr, omdat die functie met de array wel handig is omdat eerder vervangen termen niet meer worden vervangen. Tenzij je dat wel wilt en dan gebruik je meerdere str_replace() statements. Voor het vervangen van 1 enkele term kun je ze allebei gebruiken. Er zijn wel meer functies in php die nagenoeg of precies hetzelfde doen in PHP.
Link naar reactie
Een groot verschil tussen str_replace() en strtr() als je geen arrays gebruikt is natuurlijk ook dat strtr() geen stringparts vervangt maar karakters. Vergelijk bijvoorbeeld: [color=blue:c9d167a19e] $string = "een koe roept boe."; echo str_replace("oe", "OE", $string); // een k[b:c9d167a19e][u:c9d167a19e]OE[/u:c9d167a19e][/b:c9d167a19e] r[b:c9d167a19e][u:c9d167a19e]OE[/u:c9d167a19e][/b:c9d167a19e]pt b[b:c9d167a19e][u:c9d167a19e]OE[/u:c9d167a19e][/b:c9d167a19e] echo str_replace("eo", "OE", $string); // een koe roept boe [/color:c9d167a19e] met [color=blue:c9d167a19e] echo strtr($string, "oe", "OE"); // [b:c9d167a19e][u:c9d167a19e]EE[/u:c9d167a19e][/b:c9d167a19e]n k[b:c9d167a19e][u:c9d167a19e]OE[/u:c9d167a19e][/b:c9d167a19e] r[b:c9d167a19e][u:c9d167a19e]OE[/u:c9d167a19e][/b:c9d167a19e]pt b[b:c9d167a19e][u:c9d167a19e]OE[/u:c9d167a19e][/b:c9d167a19e] echo strtr($string, "eo", "OE"); // [b:c9d167a19e][u:c9d167a19e]OO[/u:c9d167a19e][/b:c9d167a19e]n k[b:c9d167a19e][u:c9d167a19e]EO[/u:c9d167a19e][/b:c9d167a19e] r[b:c9d167a19e][u:c9d167a19e]EO[/u:c9d167a19e][/b:c9d167a19e]pt b[b:c9d167a19e][u:c9d167a19e]EO[/u:c9d167a19e][/b:c9d167a19e] [/color:c9d167a19e] en [color=blue:c9d167a19e] $string = "en een schaap blaat natuurlijk."; echo str_replace("aa", "AA", $string); // en een sch[b:c9d167a19e][u:c9d167a19e]AA[/u:c9d167a19e][/b:c9d167a19e]p bl[u:c9d167a19e][b:c9d167a19e]AA[/b:c9d167a19e][/u:c9d167a19e]t natuurlijk [/color:c9d167a19e] met [color=blue:c9d167a19e] echo strtr($string, "aa", "AA"); // en een sch[u:c9d167a19e][b:c9d167a19e]AA[/b:c9d167a19e][/u:c9d167a19e]p bl[u:c9d167a19e][b:c9d167a19e]AA[/b:c9d167a19e][/u:c9d167a19e]t n[u:c9d167a19e][b:c9d167a19e]A[/b:c9d167a19e][/u:c9d167a19e]tuurlijk[/color:c9d167a19e] Bovendien worden eenmaal vervangen delen niet nogmaals meegenomen bij andere vervangingen. Als je bijv. alle a's in b's wil vervangen en alle b's in a's dan kan dat simpel met [color=blue:c9d167a19e]strtr($string, "ab", "ba")[/color:c9d167a19e]. Bij str_replace zal je eerst met een tussenresultaat moeten werken. Als je overigens kijkt naar de functionaliteit van tr in perl dan is deze vele malen krachtiger, bijvoorbeeld met constructies als tr/a-d/x/ (vervang alle a, b, c en d's met een x). Bij mijn weten is dat niet mogelijk in PHP (niet getest overigens).
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...