probleempje met ereg_replace

Pagina: 1
Acties:
  • 118 views sinds 30-01-2008
  • Reageer

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ik ben met een scheldwoorden-verwijder functie bezig. ik maak daarbij onderscheid of een woord opzich moet staan om verwijderd te worden of dat ie altijd verwijderd moet worden

del bijvoorbeeld, moet opzichzelf geschreven staan anders zou duidelijk in dui***ijk veranderen.

nou is er alleen 1 dingetje waar ik niet helemaal uitkom. ik heb het nu zo:
PHP:
1
ereg_replace("([^A-Za-z])($vies_woord)([^A-Za-z])","\\1$asterix\\3",$var);


alleen dat zet del niet om in *** als het aan het begin of einde van een zin staat. Moet je dan met 2 if's, $ en ^ aan de gang gaan, of kan het ook makkelijker?

hoop dat het duidelijk is

Verwijderd

Een scheldwoord zou je bijvoorbeeld alleen kunnen replacen als het een heel woord is:
\bdel\b

\b is een word boundary, ofwel het einde of begin van een reeks word tekens (\w)

Je kunt bijvoorbeeld ook alleen woorden replacen als het een voorvoegsel is, bijvoorbeeld:

\btering

Dan voorkom je al dat bijvoorbeeld 'afwatering' verkeerd wordt opgevat. Maar 'vliegende vinketering' zal er nog steeds doorheen komen. Sommige woorden zijn erg lastig voor die replace functie, maar veel woorden kun je er wel uit filteren.

De vraag is dan alleen of dat ook echt altijd moet. Als er en keer een serieus gesprek is over iemand die een familielid is verloren aan kanker, dan is het niet gewenst dat het woord wordt omgetovert naar bijvoorbeeld 'k**ker'.

Er zijn dus wel bepaalde afwegingen die je moet maken :)

[edit]
Ik zit me alleen net te bedenken dat ik niet zeker weet of POSIX ook het gebruik van \b ondersteunt. Als dat niet het geval is, dan zou je misschien beter PCRE kunnen gebruiken :)

Verwijderd

misschien iets als
( |\\n|\\n\\r)($vieswoord)( |\\n|\\n\\r)