[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с функцией preg_replace
Pukiman
Здравствуйте. Помогите убрать повторяющееся слово в url

есть код:

$termlink ='http://www.mega-pools.ru/category/dushevye-ograzhdeniya-poddony/poddony';
$link = 'poddony';
$myslug = 'poddony';

$termlink = preg_replace ("/category.*?".$myslug."/", $link, $termlink);

//результат $termlink = 'http://www.mega-pools.ru/poddony/poddony';
// поддоны дублируются 2 раза poddony/poddony


а если будет так, то всё нормально.

$termlink ='http://www.mega-pools.ru/category/dushevye-ograzhdeniya-poddony/nepoddony';
$link = 'nepoddony';
$myslug = 'nepoddony';

$termlink = preg_replace ("/category.*?".$myslug."/", $link, $termlink);

//результат $termlink = 'http://www.mega-pools.ru/nepoddony';
// тут все нормально, слово nepoddony не повторяется

Игорь_Vasinsky
$termlink = preg_replace ("/category.*".$myslug."/", $link, $termlink);


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Pukiman
Объясните пожалуйста, что именно Вы сделали убрав символ "?"
Игорь_Vasinsky
намекну: аналогично отработает и ваш паттерн, но если добавить один модификатор U

$termlink = preg_replace ("/category.*?".$myslug."/U", $link, $termlink);


более внятно, чем здесь http://www.skillz.ru/dev/php/article-Regul..._chaynikov.html - я не скажу.


Цитата
Последний модификатор - \U

По умолчанию, PCRE "жадный" - это не значит что они съедят вашу печеньку,
а означает что шаблон совпадет с наибольшим возможным количеством символов,
попадающих под этот шаблон.

Чтобы отключить такую "жадность" регулярных выражений
- используем ограничитель "?", например "(.*?)"
- используем модификатор "\U".

Новичкам желательно использовать этот модификатор по-умолчанию, чтобы не возникало конфузов.


+

Подводные камни c ? и U

Цитата
Важно заметить, что модификатор "U" не только делает поиск нежадным, он инвертирует поведение жадности квантификатора "?".
Если использовался квантификатор "?" и одновременно модификатор "U", действие "?" будет инвертировано.



_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.