Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: чем зарегулярить?
 
 автор: Рома   (26.02.2010 в 17:04)   письмо автору
 
 

ситуация такая. в добавляемом сообщении на форум имеется несколько ссылок. Собираю эти ссылки в массив, через preg_match_all. После некоторых вычислений каждый элемент массива получает свой уникальный порядковый номер, например первая найденная ссылка получает 1067, следующаю 1068 и т.д. как в исходном тексте заменить ссылки на присвоенные им номера.
Т.е. Если в тексте пять ссылок, то первое вхождение заменить на 1067, второе на 1068, ... последнее на 1071. Количество номеров в массиве всегда равно количеству вхождений которые требуется заменить.

  Ответить  
 
 автор: cheops   (26.02.2010 в 17:24)   письмо автору
 
   для: Рома   (26.02.2010 в 17:04)
 

А вы не могли бы привести пример текста с ссылками и пример массива?

  Ответить  
 
 автор: Рома   (26.02.2010 в 17:54)   письмо автору
 
   для: cheops   (26.02.2010 в 17:24)
 

<?php

// обрабатываемый текст
$post = 'текст сообщения Описание ссылки 1 еще текст сообщения текст сообщения
Описание ссылки 2 еще текст сообщения еще текст сообщения еще текст сообщения
Описание ссылки 3';

// так вычисляю количество ссылок
preg_match_all("#\[url[\s]*=[\s]*((?=http://)[\S]+)[\s]*\][\s]*([^\[]*)\[/url\]#is", $post, $arr_link);

// дальнейшие мои вычисления возвращают массив, равный количеству ссылок в тексте
// например такой
$my_array = array('1321', '1322', '1323',);

// хочу получить
$result_post = 'текст сообщения link_1321 еще текст сообщения текст сообщения
link_1322 еще текст сообщения еще текст сообщения еще текст сообщения
link_1323';
?>
кодировка utf8

  Ответить  
 
 автор: Рома   (26.02.2010 в 17:57)   письмо автору
 
   для: Рома   (26.02.2010 в 17:54)
 

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

  Ответить  
 
 автор: .heed   (26.02.2010 в 17:37)
 
   для: Рома   (26.02.2010 в 17:04)
 

всмысле
0=>первая ссылка
1=>вторая
0=>третья ??
$txt = str_replace(array_values($array), array_keys($array), $txt);
иногда можно делать без всяких таких манипуляций preg_replace_callback() , со всеми нужными действиями внутри callback-функции
Но так вся обработка внутри , при каждом нахождении, и доступны только полученые ранее результаты

  Ответить  
 
 автор: Рома   (26.02.2010 в 18:00)   письмо автору
 
   для: .heed   (26.02.2010 в 17:37)
 

именно так и поступил.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования