2016-02-03 4 views
-2

Я пытаюсь сделать следующее в php, используя регулярные выражения.Текст Surround с тегом - PHP

Пример строки: «ленивая собака лаяла, ленивая сумасшедшая собака».

Я хочу изменить его на:

"the <tag>lazy</tag> dog barked. <tag>Lazy</tag> crazy dog." 

Так что я хочу, чтобы окружать каждый экземпляр Лазы независимо от случая с

Я знаю, что вы можете использовать регулярные выражения, как «/ \ Блази \ Ь/i ", чтобы выбрать ленивый.

Для меня жизнь не может понять, как использовать preg_replace, чтобы заменить слово независимо от случая с тем же словом, окруженным тегами.

Помощь приветствуется.

+0

Используйте ' '\ 0'' как обратная ссылка на матч. См. [This] (http://ideone.com/H5rY5N). –

+0

Посмотрите и попробуйте использовать функцию 'explode()'. Он будет разделять все предложение на отдельные массивы, а затем вы можете оттуда удалять отдельные слова и т. Д. –

+0

@Filip: Explode не разрешает поиск всего слова. –

ответ

0

Вы можете использовать preg_replace_callback в этом примере http://php.net/manual/en/function.preg-replace-callback.php.

$string = "the lazy dog barked. Lazy crazy dog."; 

$result = preg_replace_callback('/lazy/i', function ($item) { 
    return '<tag>' . $item[0] . '</tag>'; 
}, $string); 

echo $result; 
+0

Thx, хорошее предложение. Посмотрите на это. Очень элегантно. –

0

preg_replace с группировкой должны быть в состоянии сделать это:

$string = "the lazy dog barked. Lazy crazy dog."; 
echo preg_replace('/\b(lazy)\b/i', '<tag>$1</tag>', $string); 

Выход:

the <tag>lazy</tag> dog barked. <tag>Lazy</tag> crazy dog. 

Если вы хотите заменить несколько терминов, использовать или (|) между каждым термином ,

Например:

echo preg_replace('/\b(lazy|tired)\b/i', '<tag>$1</tag>', $string); 

Это поставит lazy и tired внутри tag элементов.

Regex101 Демо: https://regex101.com/r/hT6xR5/1
PHP Демо: https://eval.in/512715

Смежные вопросы