2010-08-09 2 views
1

В последующих к моей предыдущей question, я хочу, чтобы заменить каждый экземпляр все-CAPS * слово со ссылкой на следующий формат:preg_replace не заменяя в Wordpress плагин

dictionary.com/browse/<TERM> 

preg_replace вызов Я использую это:

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

Использование http://gskinner.com/RegExr, кажется, у меня есть регулярное выражение правильно, и что он должен заменять на каждое ребро д.

Я сделал что-то не так, как в вызове preg_replace, так и в процессе регистрации плагина/фильтра в Wordpress API?


Полный контекст вызова:

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'); 

* Я использую синтаксис [A-Z][A-Z]+, чтобы гарантировать, что я не совпадают слова, как "я" и "А"

ответ

1

Я считаю, что функция должна вернуть результат замены:

return $content; 

Кроме того, это регулярное выражение выглядит неправильно. Если вы хотите, чтобы соответствовать целому слову заглавных букв, это

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

Кроме того, вы хотите $0 (весь матч), а не $1 (первый захвата группы, которые ваше регулярное выражение не имеют)

+0

Добавления '\ b' помогли ... теперь он заменяет ссылку, но не добавляет форму' $ 1' в соответствие .. какие-либо дальнейшие мысли? – warren

+0

Я этого не заметил: вам нужно '$ 0' (целое совпадение), а не' $ 1' (первая группа захвата, которой не существует ваше регулярное выражение). –

+0

вот что я искал! Спасибо, Алан – warren