Как вставить в середину строки другую строку

antono
На сайте с 12.07.2004
Offline
303
5004

Два часа голову ломаю, решения не нашел.

Есть строка "Служба Технической Поддержки"

Нужно выделить фрагмент "Тех" тэгом <b>, то есть чтобы получилось:

"Служба <b>Тех</b>нической Поддержки"

preg_replace а также другие функции ищущие по шаблону и заменяющие фрагмент не предлагать, так как я не знаю с каким регистром этот фрагмент будет, то есть могут набрать "тех", "ТеХ", результатом работы этих функций будет:

"Служба <b>тех</b>нической Поддержки"

"Служба <b>ТеХ</b>нической Поддержки"

то есть будет искажение.

Нужна функция, которая ищет вхождение слова "Тех" и не заменяет его а вставляет перед ним и после свои необходимые символы.

Надеюсь понятно объяснил:)

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#1

Ну во-первых, все преги работают с ключиком i (ignore case), в во вторых здесь и простой replace подойдёт, например:

str_ireplace("тех", "<b>Тех</b>", "Строка, в которой надо заменить").

• Контекстные ссылки с внутренних страниц навсегда (/ru/forum/370882) • Качественные сайты для заработка на контекстной рекламе и ссылках
[Удален]
#2

допустим нужная строка нах-ся в переменной ААА

делаем следующее:

в переменную ВВВ заносим строку ААА переводя ее в верхний регистр (есть стандартная ф-ция)

После этогов троке ВВВ ищем слово "ТЕХ", если находим, то получаемпозицию...

После этого надо строку ААА разделить на 3 строки:

1ая - символы до начала слова "тех"

2ая - само слово "тех"

3-я - символы после слова "тех"

И на последок в нашу ААА загоняем сумму строк: 1+"болд"+2+"болд"+3

Моно все это загнать в отдельную функцию, на вход которой будет подаватьсястрока и подстрока, которую нуно найти,а на выходе строка с выделенным фрагментом.

antono
На сайте с 12.07.2004
Offline
303
#3

Я же говорю что

preg_replace("/str_what/i", "str_to", $string)

не подходит, так как мне нужно чтобы в стоке string фрагмент "str_what" остался без изменений, то есть я не знаю в каком регистре набрали str_to, например "ТЕХ", то и str_what примет значение "ТЕХ", а мне нужно чтобы он остался как в оригинале

СКОРПИОН
На сайте с 05.01.2006
Offline
120
#4

Понял.

Тогда так:

preg_replace("/(.*)(Тех)(.*)/i", "$1<b>$2</b>$3", "Строка, в которой надо заменить")

antono
На сайте с 12.07.2004
Offline
303
#5

СКОРПИОН, спасибо огромное, это то что нужно!

kittenk, тоже спасибо, но тот вариант намного проще.

antono
На сайте с 12.07.2004
Offline
303
#6

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

preg_replace("/(.*)(Тех)(.*)/i", "$1<b>$2</b>$3", "Строка, в которой надо заменить")

Эта во все в строке:

preg_replace("/(.*?)(Тех)(.*?)/i", "$1<b>$2</b>$3", "Строка, в которой надо заменить")

lexwrlk
На сайте с 12.10.2005
Offline
130
#7

тогда вот так:

$text = "Строка, в которой надо заменить";

$text = preg_replace_callback("/(.*)(Тех)(.*)/i", "callback_replace<название функции>", $text)

function callback_replace<название функции> ($matches) {

$text = $matches[1] . "<b>" . $matches[2] . "</b>" . $matches[3];

return $text;

}

или что-то похожее очень (просто не проверял :)), заменяет во всех вхождениях соответствия шаблону.

Сори, не дочитал сразу до конца Ваш пост, но так тоже можно делать.

СДЛ СДЛу рознь (с) Форест Гамп
Donald
На сайте с 30.10.2004
Offline
28
#8

Понапридумали-то. СКОРПИОНУ респект. Жалко в репу не дают + поставить...

Каталог (http://www.eprst.ru), новости (http://news.eprst.ru), чат (http://chat.eprst.ru), открытки (http://postcards.eprst.ru), знакомства (http://lovers.eprst.ru), клубы (http://clubs.eprst.ru), мелодии для сотовых (http://mobile.eprst.ru), email (http://mail.eprst.ru).
midian777
На сайте с 07.07.2004
Offline
108
#9
Donald:
Жалко в репу не дают + поставить...

Я за Вас поставил )

M
На сайте с 12.05.2005
Offline
133
#10

Скачать вот этот класс и забыть о проблемах, например когда искомое выражение встретится в проперти alt или title и вставка в него тега исказит всю выдачу :(

_ttp://www.phpclasses.org/safehighlight

_ttp://www.phpclasses.org/keyhighlighter

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий