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 :: заменить последовательность заключенную между наборами символов

 PHP.SU

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


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

> Без описания
gin101
Отправлено: 22 Октября, 2016 - 18:20:30
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2015  


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




доброго времени суток, господа!
Прошу помощи, мне необходимо заменить все вхождения шорткода такого вида

CODE (text):
скопировать код в буфер обмена
  1. [url=http://ru.link.ru]text[/url]


на пригодный для wordpress

CODE (text):
скопировать код в буфер обмена
  1. [url link="http://ru.link.ru"]text[/url]


используя функцию preg_replace, желательно еще пояснить каким образом это работает.
К сожалению в регулярных выражениях я туго соображаю и не могу сообразить как мне это сделать.

(Отредактировано автором: 22 Октября, 2016 - 18:21:06)

 
 Top
Строитель Модератор
Отправлено: 22 Октября, 2016 - 19:20:34
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




gin101, вот пример
PHP:
скопировать код в буфер обмена
  1. $search = '[url=http://ru.link.ru]text[/url]';
  2. $patt = '~\[url=(http://ru.link.ru)](text)\[/url]~';
  3. $repl = '[url link="$1"]$2[/url]';
  4. $out = preg_replace($patt, $repl, $search);
  5.  
  6. echo $out;


А здесь описан принцип работы http://php.net/manual/ru/functio...preg-replace.php (читать о подмасках)

(Отредактировано автором: 22 Октября, 2016 - 19:22:31)

 
 Top
gin101
Отправлено: 22 Октября, 2016 - 20:00:01
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2015  


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




Вроде как с грехом попалам разобрался вот такой шаблон составил
PHP:
скопировать код в буфер обмена
  1.  
  2. $patt = '~\[url=([\s\S]*)]([\s\S]*)\[/url]~';
  3. $repl = '[url link="$1"]$2[/url]';
  4. $search = '[url=http://anylink.ru]some text here[/url]';
  5. $out = preg_replace($patt, $repl, $search);
  6.  
  7. echo $out;
  8.  


но всеравно ничерта не понял, но как-то слишком все запутано это и не очень доступно для понимания.
В общем [] квадратные скобки означают подмножество, \s - находит пробельные символы, а \S - все кроме пробельных символов, таким образом, комбинируя эти два оператора, я указываю что в этом месте может быть любая последовательно символов.
Однако отдельного оператора который бы указывал сразу на любое подмножество символов я не нашел, хотя он явно бы не был лишним, хотябы для удобства.

(Отредактировано автором: 22 Октября, 2016 - 20:46:04)

 
 Top
Строитель Модератор
Отправлено: 22 Октября, 2016 - 23:53:32
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




gin101 пишет:
Однако отдельного оператора который бы указывал сразу на любое подмножество символов я не нашел, хотя он явно бы не был лишним
Вам нужна была точка ))
PHP:
скопировать код в буфер обмена
  1. $patt = '~\[url=(.*)](.*)\[/url]~';
  2. $repl = '[url link="$1"]$2[/url]';
  3. $search = '[url=http://anylink.ru]some text here[/url]';
  4. $out = preg_replace($patt, $repl, $search);
  5.  
  6. echo $out;

(Добавление)
gin101 пишет:
но всеравно ничерта не понял
Вероятно вы прочитали не то - надо читать в описании к preg_replace() поиск по подмаскам.
 
 Top
gin101
Отправлено: 23 Октября, 2016 - 11:46:52
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2015  


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




Строитель пишет:
gin101 пишет:
Однако отдельного оператора который бы указывал сразу на любое подмножество символов я не нашел, хотя он явно бы не был лишним
Вам нужна была точка ))
PHP:
скопировать код в буфер обмена
  1. $patt = '~\[url=(.*)](.*)\[/url]~';
  2. $repl = '[url link="$1"]$2[/url]';
  3. $search = '[url=http://anylink.ru]some text here[/url]';
  4. $out = preg_replace($patt, $repl, $search);
  5.  
  6. echo $out;

(Добавление)
gin101 пишет:
но всеравно ничерта не понял
Вероятно вы прочитали не то - надо читать в описании к preg_replace() поиск по подмаскам.


Да, спасибо, думаю так будет лучше
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB