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

Форум PHP

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

 

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

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

тема: Замена внутри цикла
 
 автор: max90   (25.03.2012 в 17:16)   письмо автору
 
 

Здравствуйте. Нужно обработать текст, найти ссылки в тексте и заменить на другие.
Остановился на замене ссылок. Если в тексте встречаются две или более ссылки происходит поочередная замена сначала одной ссылки, потом другой. (То есть str_replace выполняется столько раз, сколько имеется ссылок в тексте.) Код такой
    preg_match_all("<a href=\"\.\.\/\d{1,4}.*\">sUi",$full_story, $match);
    foreach($match[0] as $url) {
    $link="a href=\"/".$row1_id.".html\"";
    $str_replace = str_replace($url1,$link,$full_story);
    var_dump($str_replace);
    }

Как сделать корректную замену?

  Ответить  
 
 автор: Sfinks   (26.03.2012 в 09:33)   письмо автору
 
   для: max90   (25.03.2012 в 17:16)
 

А $row1_id откуда берется?
_____
P.S. Напомните мне кто-нибудь что значит "U" в конце РВ
P.P.S. Чет я не понял, тут ограничителями РВ служат < > чтоли? Разве так можно?
P.P.P.S. Если ограничители РВ не слеши, то слеш можно не экранировать.

  Ответить  
 
 автор: max90   (26.03.2012 в 10:55)   письмо автору
 
   для: Sfinks   (26.03.2012 в 09:33)
 

$row1_id внутри цикла, я просто убрал лишний код, чтобы не получилось простыни :)
    $row1 = $db->super_query( "SELECT * FROM `table` WHERE `category` LIKE '".$category."' AND `metatitle` LIKE '%".$url."%'
LIMIT 1" );
    $row1_id = $row1['id'];

_____
1. U (PCRE_UNGREEDY)http://www.pcre.ru/docs/php/text/stdmod
Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные.
2. хм, можно наверное, код работоспособный :) (хотя я всегда использую слеши)
3. Спасибо, буду знать

  Ответить  
 
 автор: Sfinks   (26.03.2012 в 11:08)   письмо автору
 
   для: max90   (26.03.2012 в 10:55)
 

> ..... $row1_id = $row1['id'];
Думаю тогда никак по другому не сделаете. При чем самое плохое в этом коде не многократное str_replace, а многократное $row1 = $db->super_query(....). Можно избавиться от цикла и стр-реплэйс если вместо preg_match() использовать preg_replace_callback(), но внутри функции все-равно будет выборка из бд.

>1. U (PCRE_UNGREEDY)http://www.pcre.ru/docs/php/text/stdmod
>Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные.
Thanks )

  Ответить  
 
 автор: Sfinks   (26.03.2012 в 11:22)   письмо автору
 
   для: Sfinks   (26.03.2012 в 11:08)
 

В принципе наверно стоит воспользоваться preg_replace_callback(), т.к. в этом случае функция будет работать только с найденным фрагментом, а не со всем текстом, как str_replace. Это будет покрасивше. Но вот БД... С ним наверное ничего не сделаешь, особенно если количество ссылок в БД не постоянное.

  Ответить  
 
 автор: max90   (26.03.2012 в 13:06)   письмо автору
 
   для: Sfinks   (26.03.2012 в 11:22)
 

Спасибо, буду делать тогда с использованием файлов.

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

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