2010-06-23 5 views
3

J'utilise cette ligne pour rechercher un nom dans le texte avec url.remplacer les mots dans le texte ignorer les URL

$name = "xxx"; 
$text = "my name is xxx en my website is http://xxx.something.com"; 
$text = preg_replace("/\b(".preg_quote($name, "/").")\b/i", $url, $text); 

Comment puis-je changer cette regex d'ignorer urls dans le texte

Répondre

1

1) Vous pouvez utiliser une expression rationnelle pour trouver toutes les urls (par exemple, http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/) - se souvenir de leurs positions et la longueur

2) utilisez votre regex pour trouver toutes les occurrences d'un mot et aussi mémoriser les positions et la longueur

3) passer en revue les résultats de 2) et vérifier si le mot n'est pas dans une URL.

0

Pas exactement ce que vous cherchez, mais peut-être cette aide:

Remplacer xxx avec yyy si et seulement si xxx est entouré par des espaces ou si elle est au début ou à la fin de la chaîne.

<? 
$name = "xxx"; 
$text = "xxx my name is xxx en my website xxx is http://xxx.something.com xxx"; 
$text = preg_replace("%(?<=^|)".$name."(?= |$)%i", "yyy", $text); 
echo $text."\n"; 
//yyy my name is yyy en my website yyy is http://xxx.something.com yyy 
?> 

Il aurait été plus facile si PHP pris en charge regard de longueur variable derrière les affirmations; parce que nous aurions pu utiliser un plus précis (?<!http://[^ ]+)\bxxx\b

Questions connexes