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
Форумы портала PHP.SU :: Версия для печати :: Замена тега в тексте
Форумы портала PHP.SU » PHP » Регулярные выражения » Замена тега в тексте

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

1. eri - 02 Августа, 2016 - 22:11:10 - перейти к сообщению
Привет. Подскажите, регулярку для замены в тексте допустим, каждого 3 тега p, на другой тег <blockquote>, а идеале конечно чтобы, рандомно менялся каждый 3, или 4, или 5 тег, но необязательно.
2. Fart - 02 Августа, 2016 - 22:25:12 - перейти к сообщению
Если не секрет, а зачем менять рандомно теги? И это обязательно на стороне сервера делать?
3. vintag - 03 Августа, 2016 - 17:11:20 - перейти к сообщению
Не думаю чтобы регулярки помогли, но делается довольно просто
4. eri - 03 Августа, 2016 - 20:01:36 - перейти к сообщению
Подскажи, как сделать проще?
5. vintag - 04 Августа, 2016 - 09:37:33 - перейти к сообщению
eri пишет:
Подскажи, как сделать проще?

самое простое это прописать требуемые элементы в другом элементе, элементах. Для этого подойдут таблицы в идеале. ид каждой ячейки должно соответствовать ид заменяемого элемента, например, b0 - c0, b1 -c1, b2-c2 и тд, где цифра есть переменная счетчик исмпользуемая при составлении страницы средствами пшп. таких цифр может быть так же две и более, не важно. Главное что мы делаем с этим всем потом уже явкойскриптом. А делаем мы просто, выбираем ид ячейки таблицы, b0, меняем первую буквсу на c и получается что мы уже обращаемся к элементу который надо сменить. Да льше присваиваем чемуто там содержимое тега, сам тег из ячейки удаляем и прописываем новый в ячейки с содержимым которое сохранили предварительно и ид.
<td id="b0"><p id="c0>содержимое</p></td>
Ну и думаю понятно как из этого каскадную сделать смену
6. Строитель - 04 Августа, 2016 - 12:24:44 - перейти к сообщению
vintag пишет:
самое простое это прописать требуемые элементы в другом элементе, элементах.
Если я его правильно понял, он получает тег <p> динамически. Иначе зачем ему нужна была бы регулярка, если бы он мог переписать третий по счёту тег "ручками".
vintag пишет:
Для этого подойдут таблицы в идеале. ид каждой ячейки должно соответствовать ид заменяемого элемента
С таким же успехом можно было бы задать id для тега <p> .
7. Строитель - 04 Августа, 2016 - 16:39:47 - перейти к сообщению
eri пишет:
Подскажите, регулярку для замены в тексте допустим, каждого 3 тега p, на другой тег <blockquote>
Одной регуляркой тут наверное не обойтись
PHP:
скопировать код в буфер обмена
  1. $str = '
  2.    <p>Тег1</p> Текст вне параграфа <p>Тег2</p><p>Тег3</p><p>Тег4</p><p>Тег5</p>
  3.    <p>Тег6</p><p>Тег7</p><p>Тег8</p><p>Тег9</p><p>Тег10</p>
  4. ';
  5. preg_match_all('~<p>[a-zа-я0-9\s]+</p>~ui', $str, $matches);
  6.  
  7. $out = '';
  8. foreach ($matches[0] as $key => $val) {
  9.     $out .= (++$key % 3 ? $val : '<blockquote>'. strip_tags($val) .'</blockquote>');
  10. }
  11.  
  12. echo $out;
  13.  

(Добавление)
eri пишет:
в идеале конечно чтобы, рандомно менялся каждый 3, или 4, или 5 тег
Вот так будет рандомно меняться каждый 3, или 4, или 5 тег
PHP:
скопировать код в буфер обмена
  1. $str = '
  2.    <p>Тег1</p> Текст вне параграфа <p>Тег2</p><p>Тег3</p><p>Тег4</p><p>Тег5</p>
  3.    <p>Тег6</p><p>Тег7</p><p>Тег8</p><p>Тег9</p><p>Тег10</p>
  4. ';
  5. preg_match_all('~<p>[a-zа-я0-9\s]+</p>~ui', $str, $matches);
  6.  
  7. $numb = mt_rand(3, 5);
  8.  
  9. $out = '';
  10. foreach ($matches[0] as $key => $val) {
  11.     $out .= (++$key % $numb ? $val : '<blockquote>'. strip_tags($val) .'</blockquote>');
  12. }
  13.  
  14. echo $out;

 

Powered by ExBB FM 1.0 RC1