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. gin101 - 22 Октября, 2016 - 18:20:30 - перейти к сообщению
доброго времени суток, господа!
Прошу помощи, мне необходимо заменить все вхождения шорткода такого вида

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


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

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


используя функцию preg_replace, желательно еще пояснить каким образом это работает.
К сожалению в регулярных выражениях я туго соображаю и не могу сообразить как мне это сделать.
2. Строитель - 22 Октября, 2016 - 19:20:34 - перейти к сообщению
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 (читать о подмасках)
3. gin101 - 22 Октября, 2016 - 20:00:01 - перейти к сообщению
Вроде как с грехом попалам разобрался вот такой шаблон составил
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 - все кроме пробельных символов, таким образом, комбинируя эти два оператора, я указываю что в этом месте может быть любая последовательно символов.
Однако отдельного оператора который бы указывал сразу на любое подмножество символов я не нашел, хотя он явно бы не был лишним, хотябы для удобства.
4. Строитель - 22 Октября, 2016 - 23:53:32 - перейти к сообщению
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() поиск по подмаскам.
5. gin101 - 23 Октября, 2016 - 11:46:52 - перейти к сообщению
Строитель пишет:
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() поиск по подмаскам.


Да, спасибо, думаю так будет лучше

 

Powered by ExBB FM 1.0 RC1