[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Замена текста на значения
Romms
Всем привет! Задача следущая: есть стрінг - "бла <b>asd</b> блабла", надо его заменить на
'бла <i>'.$asd.'</i> блабла'...
Вопрос: Как?
Простым StringRepalce не получится...
Будьте добры - помогите!
голова лопает, немогу придумать как....



Спустя 8 минут, 34 секунды (11.11.2009 - 21:01) sergeiss написал(а):
Регулярные выражения тебе в руки, пошерсти раздел соответствующий тут на форуме. На первой или на второй странице уже найдешь ответ.

Спустя 11 часов, 47 минут, 22 секунды (12.11.2009 - 08:49) Romms написал(а):
В том и весь косяк, что там я сколько не искал - не нашол!
Проблема еше в том что нужно чтобы не только первое совпадения брало, но и все...
Будьте добры...

Спустя 1 час, 2 минуты, 48 секунд (12.11.2009 - 09:52) brainraider написал(а):
Хм, а что не будет работать

$my_str=str_replace("<b>","<i>",$my_str);


А, ну да, не будет... щас, посмотрим =)))

Спустя 8 минут, 29 секунд (12.11.2009 - 10:00) brainraider написал(а):
Хм, а что не будет работать

$my_str=str_replace("<b>","<i>",$my_str);


А, ну да, не будет... щас, посмотрим =)))

Знач так, мона юзать strtok

Вот приблизительная схема скрипта:

$my_str="бла <b>asd</b> блабла";
... заносишь в цикл
$str=strtok("$my_str","<b>");
... полученные куски забиваешь в массив и генеришь переменные.
потом заменяешь разделители нужными тебе...
ну тут кароч разберешься...

Может я ошибаюсь... я всего лишь новичок...

не неправильно... тут немного сложнеее, я не учел закрывающийся тег... но мне кажется нуна юзать енту функцию...

Спустя 12 минут, 33 секунды (12.11.2009 - 10:13) glock18 написал(а):
preg_match_all:

pattern: /<b>.*?</b>/i

replace: '<i>' . $var . '</i>'



Спустя 1 минута, 22 секунды (12.11.2009 - 10:14) Romms написал(а):
brainraider, большое спасибо! По-моему то что надо!
Теперь нужно только монуал smile.gif
_________________

glock18, мне надо так чтобы между тегами вставить значения перемены, имя которой и есть междутеговое значения...

Спустя 7 минут, 15 секунд (12.11.2009 - 10:21) glock18 написал(а):
pattern: /<b>(.*?)</b>/i
replace: '<i>' . $$1 . '</i>'

ЗЫ: может и не прокатит. $1 паттерн используется внутри строки, и возможно не будет распознан как переменная. я бы тогда использовал аналогичную функцию с callback.

Спустя 16 минут, 54 секунды (12.11.2009 - 10:38) Romms написал(а):
$pattern= '/<b>(.*?)</b>/i';
//$replace= '<i>' . $$1 . '</i>';

/* row22 */
$text= preg_replace_callback($pattern, '<i>' . $$1 . '</i>', $text);

Говорит что ошибка - Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in Y:\home\list.phpforum.ru\www\test.php on line 22

что делать?

Спустя 7 минут, 34 секунды (12.11.2009 - 10:46) glock18 написал(а):
$text = preg_replace_callback(
$pattern,
create_function('$match',
'if (!isset(${$match[1]})) {
global ${$match[1]};
}
return "<i>" . ${$match[1]} . "</i>";'
,
$text
));


что-то типа этого. вместо create_function можно объявить функцию и передать ее имя.

Спустя 1 минута, 7 секунд (12.11.2009 - 10:47) brainraider написал(а):
проверь знаки припинания =))))

скорей всего пропустил де-нить ";"

Спустя 13 минут, 28 секунд (12.11.2009 - 11:00) Romms написал(а):
Цитата (glock18 @ 12.11.2009 - 07:46)
$text = preg_replace_callback(
  $pattern,
  create_function('$match',
  'if (!isset(${$match[1]})) {
      global ${$match[1]};
  }
  return "<i>" . ${$match[1]} . "</i>";'
,
  $text
));

что-то типа этого. вместо create_function можно объявить функцию и передать ее имя.

Вставил, подставил... и вот:
Цитата
Warning: Wrong parameter count for create_function() in Y:\home\list.phpforum.ru\www\t2.php on line 14

Warning: Wrong parameter count for preg_replace_callback() in Y:\home\list.phpforum.ru\www\t2.php on line 14

Цитата
что-то типа этого. вместо create_function можно объявить функцию и передать ее имя.

Я в РНР начинающий... может скажете как?

Спустя 17 минут, 36 секунд (12.11.2009 - 11:18) Romms написал(а):
Ошибку я нашол:
$text = preg_replace_callback(
$pattern,
create_function('$match',
'if (!isset(${$match[1]})) {
global ${$match[1]};
}
return "<i>" . ${$match[1]} . "</i>";'
),
$text
);
- так правильно
Уже всё работает!
glock18, спасибо!

Спустя 1 минута, 25 секунд (12.11.2009 - 11:19) glock18 написал(а):
да, все верно. скобку не там закрыл.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.