woorden goed vervangen probleem
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)
1
2
3
4
5
6
7
8
9
10
11
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";
?>
$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)
1
2
3
4
5
6
7
8
9
10
11
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";
?>
$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
Code (php)
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
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;
?>
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;
?>
Code (php)
1
2
3
4
5
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;
?>
$zin = 'Hij heeft in zijn eentje meteen een mooie fiets gekocht.';
$zin = preg_replace ('/\been\b/', 'zo\'n', $zin);
echo $zin;
?>
@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: Okee, bedankt voor de info. Ik vind mijn oplossing ook wel creatief. ;-))
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)
1
2
3
4
5
6
7
8
9
10
11
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";
?>
$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