2010-08-09 6 views
1

Dans le suivi de mon précédent question, je veux remplacer tous les cas d'un ALL-CAPS * mot avec un lien du format suivant:preg_replace ne pas remplacer dans un plugin Wordpress

dictionary.com/browse/<TERM> 

Le preg_replace appel J'utilise est le suivant:

$content = preg_replace('#[A-Z][A-Z]+#', '<a href="//dictionary.com/browse/$1">$1</a>', $content); 

en utilisant http://gskinner.com/RegExr, il semble que j'ai mon regex correct, et qu'il devrait remplacerai sur chaque ailette ré.

Ai-je fait quelque chose de mal, soit dans l'appel preg_replace, soit dans l'enregistrement du plugin/filtre dans l'API Wordpress?


contexte complet de l'appel:

function define_filter($content){ 
    $content = preg_replace('#[A-Z][A-Z]+#', '<a href="//dictionary.com/browse/$1">$1</a>', $content); 
} 

add_filter('the_content', 'define_filter'); 

* J'utilise la syntaxe [A-Z][A-Z]+ pour assurer que je ne correspondent pas à des mots comme "I" et "A"

Répondre

1

Je crois que la fonction doit retourner le résultat du remplacement:

return $content; 

En outre, cette regex ne semble pas correcte. Si vous voulez faire correspondre un mot entier en majuscules, il est

'#\b[A-Z]+\b#' 

En outre, vous voulez $0 (tout le match), pas $1 (le premier groupe de capture, que votre regex n'a pas)

+0

les ajouts '\ b' ont aidé ... maintenant c'est substituer le lien, mais ne pas ajouter le' $ 1' former le match .. d'autres pensées peut-être? – warren

+0

Je n'ai pas remarqué que: vous voulez '$ 0' (le match entier), pas' $ 1' (le premier groupe de capture, que votre regex n'a pas). –

+0

c'est ce que je cherchais! Merci, Alan – warren