Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: preg_replace с возрастающей переменной

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
grefon
Отправлено: 05 Декабря, 2010 - 03:51:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Есть текст вот такого вида:

CODE (html):
скопировать код в буфер обмена
  1. <title>Бла-бла-бла 1</title>
  2. <title id="8">Бла-бла-бла 3 </title>
  3. <title>Бла-бла-бла 2</title>
  4. <title>Бла-бла-бла 4</title>
  5. <title class="title">Бла-бла-бла 5</title>


В некоторых титлах присудствуют атрибуты, а в некоторых нет. Нужно привести его вот в такой вид:

CODE (html):
скопировать код в буфер обмена
  1. <title id="1">Бла-бла-бла 1</title>
  2. <title id="2">Бла-бла-бла 3 </title>
  3. <title id="3">Бла-бла-бла 2</title>
  4. <title id="4">Бла-бла-бла 4</title>
  5. <title id="5">Бла-бла-бла 5</title>


Я так понимаю что это лучше всего сделать через preg_replace по шаблону, но вот как сделать чтобы в титлы ставились айдишники по порядку я не знаю.

Приблизительный код:

PHP:
скопировать код в буфер обмена
  1. preg_replace("!<title(.*?)>!si","<title id=\"$id\">",$text);


Подскажите, как сделать возрастающий id?


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Декабря, 2010 - 07:27:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я не встречал чтобы именно эта регулярка подсчитывала количество своих итераций.. Поэтому видимо в этом случае придется делать разбивку текста на массив, а уж потом можно и конкатенировать out-паттерн с текущим номером итерации...
 
 Top
grefon
Отправлено: 05 Декабря, 2010 - 08:20:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




Ок, понял. Чета я так и думал что так просто не получится, а жаль Недовольство, огорчение

В общем сделал в прямом смысле через жопу, но более элегантное решение искать некогда. Вот что у меня получилось:

PHP:
скопировать код в буфер обмена
  1.  
  2. preg_match_all("/<title(.*)<\/title>/U", $text, $stroki_array); // Собераем все нужные нам теги в массив.
  3.  
  4. // По скольку содержание между тегами title могут быть одинаковыми, а id нам нужны будут разные вставляем допфункцию-обработчик:
  5.  
  6. function podschetchik($i, $stroka) {
  7.         global $text;
  8.         $zamena = '<title id="'.$i.'">'.(preg_replace('/<title(.*?)>/', "", $stroka));
  9.  
  10. // Тут делаем проверку на наличие в тексте тега с таким id
  11.         if (substr_count($text, $zamena)) {
  12.         // Если есть то увеличиваем id и запускаем рекурсивно функцию.
  13.                 $i++;
  14.                 podschetchik($i, $stroka);
  15.         } else {
  16.         // Если нету то меняем в основном тексте данную строку
  17.                 $text = str_replace($stroka, $zamena, $text);
  18.         }
  19. }
  20.  
  21. // А теперь запускаем цикл для массива полученного preg_match_all
  22.  
  23. for ($i=0; $i < count($stroki_array[0]); $i++) {
  24.         podschetchik($i, $stroki_array[0][$i]);
  25. }
  26.  


В принципе то что мне нужно "на сейчас" я получил, но было бы интересно увидить более человеческое решение задачи, так что если кто что придумает - пишите!

(Отредактировано автором: 05 Декабря, 2010 - 08:23:27)



-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
ALEN
Отправлено: 05 Декабря, 2010 - 09:26:11
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




grefon
получится preg_replace_callback
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB