2010-11-23 7 views
1

OK j'ai donc ce script PHP:preg_replace ne fonctionne pas :(

<?php 

$stringz = "Dan likes to eat pears and his favorite color is green!"; 
$patterns = array("/pears/","/green/"); 
$string = preg_replace($patterns, '<b>\\1</b>', $stringz); 
echo "<textarea rows='30' cols='100'>$string</textarea>"; 

?> 

et quand je le lance je reçois ceci: Dan likes to eat <b></b> and his favorite color is <b></b>!

Le est censé avoir un mot en elle. .. mais il ne ...

Répondre

4

C'est parce que yo Vous ne capturez rien explicitement. \\0 capture tout le match, bien sûr, mais pour saisir des parties spécifiques, vous devez utiliser des groupes de capture si vous souhaitez utiliser \\1, \\2, \\3, etc. Changer $patterns à ceci:

$patterns = array("/(pears)/","/(green)/"); 

() ' s désigne des groupes de capture, et toute valeur capturée à l'intérieur d'eux est stockée dans la référence \\n, où \\n fait référence au groupe de capture n indexé en 1.

+0

En fait, vous capturez toujours le tout dans '\ 0 ', que vous ayez des groupes de parenthèses ou non. – cambraca

+0

Bien, ce que je voulais dire, c'est qu'il ne capture pas "explicitement" quelque chose. :) – Alex

0

Que diriez-vous

$patterns = array("/(pears)/","/(green)/"); 

?

\\1 s'applique à un sujet, qui est tout ce que vous avez entre parenthèses.

+0

/** @see [mon commentaire sur la réponse d'Alex] * / – cambraca