Woord vervangen

  • Onderwerp starter Onderwerp starter bn2vs
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

bn2vs

Terugkerende gebruiker
Lid geworden
18 aug 2007
Berichten
1.705
Ik wil enkele woorden in een text vervangen door zichzelf, maar dan tussen aanhalingstekens. Dus als bar een van deze woorden is:

foo bar foobar => foo "bar" foobar

Heb wat zitten prutsen met preg_replace, maar dat lukt niet echt. \help? :)
 
Misschien heb je hier iets aan:
PHP:
<?php
$search = 'bar';
$replace = '"'.$search.'"';
$subject = 'foo bar foobar';
echo str_replace($search, $replace, $subject);
?>
 
Dat geeft een andere output dan mijn voorbeeld... dus nee.
 
Dat geeft een andere output dan mijn voorbeeld... dus nee.

Het is inderdaad een andere output dan je voorbeeld. Maar je wou het het woordje bar wijzige en bar komt 2 keer voor in jou voorbeeld.

Succes verder.
 
Nope, maar 1 keer. That's the point.
 
$search = ' bar ';
$replace = ' "'.$search.'" ';
$subject = 'foo bar foobar';
echo str_replace($search, $replace, $subject);

Zo werkt het in ieder geval voor het voorbeeld.
 
De oplossing moet werken voor gelijk welke normale text input. Het woord kan dus op het einde of begin van een line staan, of gevolgd worden door een leesteken.
 
PHP:
$text = "foo bar! foobar"; echo '<br />';
$vervangen = array('foo', 'bar');
foreach($vervangen as $vervang){
	$pattern = "/\s(".$vervang."[\?|!\.|\,]?)\s/";
	$text = preg_replace($pattern, ' "$1" ', $text);
}

echo $text;
je moet een beetje die richting op denken. Het enige wat hier nog moet gebeuren is, dat je vooraan in de regex nog bij zet "or beginning of line or whitespace)" \s staat voor spatie maar nu pakt hij beginning of line niet. Hierdoor krijgt het eerste woord geen "". Het teken voor beginning of line is '^'
 
zo dus:

PHP:
$text = "foo bar! foobar";
$vervangen = array('foobar', 'bar');
foreach($vervangen as $vervang){
	$pattern = "/(^|\s)(".$vervang."[\?!\.\,]?)(\s|$)/";
	$text = preg_replace($pattern, ' "$2" ', $text);
}

echo $text;

nog iets aangepast
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan