woorden goed vervangen probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robin

Robin

20/04/2007 14:59:00
Quote Anchor link
hallo,

ik wil een aantal woorden vervangen en heb daarvoor de onderstaande code gemaakt...ik heb hem even wat ingekort om het zo duidelijk mogelijk te maken.

het onderstaande werkt en hij filtert netjes alle woorden :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?

$tekst
= 'hij heeft een fiets gewonnen';
$vervanging = ' ';

$filter = array(' fiets ', ' een ');
$tekst = str_replace($filter, $vervanging, $tekst);

echo "$tekst";

?>


echter als ik de tekst verander en de regel begint of eindigt met een van de te filteren woorden dan filtert hij de woorden niet :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?

$tekst
= 'een mooie fiets';
$vervanging = ' ';

$filter = array(' fiets ', ' een ');
$tekst = str_replace($filter, $vervanging, $tekst);

echo "$tekst";

?>


uiteraard is dit logisch omdat ik heb aangegeven om alleen woorden te filteren die beginnen met een spatie gevolgd door een woord en dan weer een spatie te vervangen (bijvoorbeeld : ' een ')

Indien ik deze spaties weglaat en het dus zo doe : 'een' dan filtert hij deze woorden wel, maar ook andere woorden als "meteen" of "heleen" en dat is uiteraard niet de bedoeling.

iemand enig idee hoe ik dit op kan lossen ?

ik wil dus alleen woorden vervangen als deze precies matchen met de in de filter aangegeven woorden !!
Gewijzigd op 01/01/1970 01:00:00 door Robin
 
PHP hulp

PHP hulp

16/11/2024 15:47:15
 
- SanThe -

- SanThe -

20/04/2007 15:59:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php

ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

function
wisselen($value)
{

    $filter = array('fiets', 'een');
    $vervanging = ' ';
    if(in_array($value, $filter))
    {

        return str_replace($filter, $vervanging, $value);
    }

    else
    {
        return $value;
    }
}


$tekst = 'hij heeft een fiets gewonnen';
$arr = explode(' ', $tekst);
$arr_ok = array_map('wisselen', $arr);
$tekst_ok = implode(' ', $arr_ok);
echo $tekst_ok;

?>
 
Jan Koehoorn

Jan Koehoorn

20/04/2007 16:04:00
Quote Anchor link
Daarvoor heb je nu die mooie regexen! Met \b geef je een word boundary aan;
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $zin
= 'Hij heeft in zijn eentje meteen een mooie fiets gekocht.';
    $zin = preg_replace ('/\been\b/', 'zo\'n', $zin);
    echo $zin;
?>
 
- SanThe -

- SanThe -

20/04/2007 16:14:00
Quote Anchor link
@Jan Koehoorn: En als je zoals in de eerste post, meerdere waardes ($filter) wilt vervangen door een enkele waarde ($vervanging)? Wordt ie dan niet heel lastig?
 
Jan Koehoorn

Jan Koehoorn

20/04/2007 16:16:00
Quote Anchor link
Je kunt twee arrays maken, eentje met zoekwoorden en de tweede met vervangwoorden. In de eerste zet je dan je regexen. Je aanroep ziet er dan zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $zin
= preg_replace ($search, $replace, $zin);
?>
 
- SanThe -

- SanThe -

20/04/2007 16:18:00
Quote Anchor link
@Jan Koehoorn: Okee, bedankt voor de info. Ik vind mijn oplossing ook wel creatief. ;-))
 
Robin

Robin

20/04/2007 17:42:00
Quote Anchor link
hallo,

allemaal super bedankt voor de reacties. ik ga meteen het eea aanpassen en testen...

uiteraard laat ik nog even weten of het me gelukt is.

groeten

Robin

Edit : het werkt inderdaad, alleen heb ik er nu een extra word boundary in gezet aangezien ook de woorden die eindigen op bijvoorbeeld fiets of een niet gefilterd mogen worden :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
    
$filter
= array ('/\bfiets\b/', '/\been\b/');
$replace = ' ';
$text = 'een mooie meteen enfiets enfietsbom fietsen je het een fiets';

$uitkomst = preg_replace ($filter, $replace, $text);

echo "$uitkomst";

?>



edit : lol, die tweede b stond er al in, maar had ik niet eens gezien...ik dacht al waarom ineens het woord "been" gebruiken ha ha
Gewijzigd op 01/01/1970 01:00:00 door Robin
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.