Форум русской поддержки Joomla!® CMS
04.12.2016, 05:57:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

замена подстроки в строке при n-вхождении

 (Прочитано 184 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sega
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 250


« : 24.02.2016, 15:53:26 »

Есть строка. Нужно заменить подстроку, но не во всех вхождениях, а только например при втором, как такое реализовать?
те то же самое что и str_replace только не все вхождения.
Наверное можно разбить на массив, но есть же способ проще?

Записан
SeBun
Практически профи
*******

Репутация: +134/-3
Offline Offline

Пол: Мужской
Сообщений: 2272



« Ответ #1 : 24.02.2016, 16:07:57 »

preg_replace
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1443


« Ответ #2 : 24.02.2016, 16:10:36 »

Что надо заменить, Оракул? И на что?
Записан
sega
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 250


« Ответ #3 : 24.02.2016, 16:16:28 »

Что надо заменить, Оракул? И на что?
Код:
<p>111</p>
<p>222</p>
<p>333</p>
<p>444</p>

нужно, например, заменить
Код:
<p>222</p>
на
Код:
<p>222яяя</p>

но тест может быть любой. Поиск нужно вести именно по второму вхождению тега <p>

Записан
sega
Давно я тут
****

Репутация: +4/-0
Offline Offline

Сообщений: 250


« Ответ #4 : 24.02.2016, 16:17:41 »

preg_replace
как я понял у preg_replace параметр limit указывает не на номер вхождения а на количество вхождений же?
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #5 : 24.02.2016, 16:45:45 »

Ну я бы как нибудь так сделал:
Код
$str = preg_replace_callback(
       '|<p>(.*?)<\/p>|i',
       function ($matches) {
  static $count = 0;
  if($count == 1) {
     $matches[1] .= 'aaa';
  }
          $count++;
  return '<p>' . $matches[1]  .'</p>';
       },
       $str
   );
echo $str;
 

Но это если там простой и валидный HTML. В противном случае XML парсер + xpath
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1443


« Ответ #6 : 24.02.2016, 17:30:47 »

Код
function replacer($m)
{
   static $cnt = 0;
   return !$cnt++ ? $m[0] : $m[1] . 'замена' .  $m[3];
}
 
$replaced = preg_replace_callback('#(<p>)(.*?)(</p>)#is', 'replacer', $string, 2);
« Последнее редактирование: 24.02.2016, 17:47:56 от Филипп Сорокин » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet