Этот урок набрал набрал достаточно большое количество
комментариев и дальнейшее его комментирование отключено.
Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку,
посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали.
Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Сначала удивило, что созданный массив $matches имеет "копии" найденных элементов (ассоциативный, индексный) при использовании масок:)
Какие ещё проверки можно использовать для данного кода?
С помощью регулярных выражений выдерните из этой переменной 2 значения и положите их в переменные:
$controller - сюда положите строку 'post'
$id - сюда положите число 892
Ох долго я этот урок проходил. Дошло вроде с раза 3, несколько раз перечитывал. НО вот на этот ресурсе https://regex101.com проверял свой код мне ставит другой
Хотя тоже рабочий, но вот этот параметр отвечает за порядок сортировки как я понял (PREG_SET_ORDER), а вот 0 это что такое? Поправьте, если я не прав или не туда лезу.
Лезьте куда хотите) Это прекрасно, что вы выходите за рамки уроков. На языке PHP можно делать совершенно разные решения одной и той же задачи. Не удивляйтесь тому, что другой код делает в результате то же самое. На счёт аргумента - не знаю, почитайте документацию по функции.
Скопировал вашу строку "Меняем автора статьи 123 c "Иван" на "Пётр" и начал с ней пытаться что-нибудь сделать. Никак не мог понять, почему ваши выражения работают, а мои нет. Оказалось что у вас буква "с" - английская ))))
$re = '/к.ш/'; // '.' - любой символ
$str = 'кукушки не кушают шоколадки';
preg_match_all($re, $str, $matches);
var_dump($matches);
// Выводит пустой масив. Если $re = '/к./' - выводит все варианты только в виде к и знак вопроса.
// Это так нужно? Или я что-то не правильное ввожу?
Спасибо за урок, а обязательно делать буквенное ограничение для контроллера? id логично что будет в числовом представлении, а контроллеры именуются только буквами?
Угу, исправлю. По началу я ставил '/' и из за этого происходил сбой так как ограничители стоят '/'. Недавно после ДЗ узнал что можно использовать в качестве ограничителей любые символы. Спасибо за совет)
Мне кажется, надо регулярки раньше учить, а не когда весь курс прошёл) Тем более, так доступно написано, что можно просто продублировать в курс для начинающих
Один вопрос, а как сделать, чтобы код брал только первую часть адреса, если к примеру адрес такой post/title/892 ?
Выключал жадность, тогда в id идёт только одна цифра.
Всем привет, подскажите а как обрабатывать регулярками следующую ситуацию
у меня есть массив маршрутов, я его перебираю в цикле на предмет совпадения с ```
$_SERVER['REQUEST_URI']
как написать регулярку, чтобы если в урл есть GET параметры, они игнорировались поиском?
Например, урл blog/animals я проверяю так
'blog/([a-z0-9_-]+)*$' => 'blog/category',
вызывая тем самым метод category контроллера blog, мне нужно что-бы урл вида
blog/animals/?vid=dog&color=black так же обрабатывался, как и урл blog/animals
Заранее спасибо!
Сначала удивило, что созданный массив $matches имеет "копии" найденных элементов (ассоциативный, индексный) при использовании масок:)
Какие ещё проверки можно использовать для данного кода?
При использовании масок стоит всегда использовать ключи-имена, соответствующие маскам.
Отлично!
Отлично!
С помощью регулярных выражений выдерните из этой переменной 2 значения и положите их в переменные:
$controller - сюда положите строку 'post'
$id - сюда положите число 892
Всё правильно)
Отлично!
.(?<controller>\b\w+\b).(?<id>\d{3})
На конкретном примере работает, но если число цифр в id поста изменится, то поломается.
Отлично
P.S. посмотрел комменты выше, мне кажется мое решение самое правильное, лаконичное и универсальное, я прав?
Нет. У вас здесь вообще нет ни контроллера ни id в результате.
Прошу прощения, так увлекся регулярками (никогда их не понимал, а тут врубился!!!) и на радостях невнимательно прочитал домашку :))
Не то. Под вашу регулярку попадает /post/kokok/892 и на выходе имеем 3 совпадения.
В условиях домашки нет предположений, что урл возможен другой. Есть четкое условие, которое я выполнил.
И тем не менее:
Привет.
Не подскажешь, как взять от строки только символы до букв, а потом наоборот
Например: 04.12-15 абракадабра2
Нужно получить: 04.12-15 и абракадабра2
Урок не помог?
Такое выражение может помочь в данном случае:
Отлично!
В целом ок. Но:
Хорошо. Только это скорее не post_title, а controller_name
Ок, понял.
Супер!
Ох долго я этот урок проходил. Дошло вроде с раза 3, несколько раз перечитывал. НО вот на этот ресурсе https://regex101.com проверял свой код мне ставит другой
Хотя тоже рабочий, но вот этот параметр отвечает за порядок сортировки как я понял (PREG_SET_ORDER), а вот 0 это что такое? Поправьте, если я не прав или не туда лезу.
Лезьте куда хотите) Это прекрасно, что вы выходите за рамки уроков. На языке PHP можно делать совершенно разные решения одной и той же задачи. Не удивляйтесь тому, что другой код делает в результате то же самое. На счёт аргумента - не знаю, почитайте документацию по функции.
Скопировал вашу строку "Меняем автора статьи 123 c "Иван" на "Пётр" и начал с ней пытаться что-нибудь сделать. Никак не мог понять, почему ваши выражения работают, а мои нет. Оказалось что у вас буква "с" - английская ))))
:D вот это пасхалочка
array (size=1)
0 =>
array (size=0)
empty
array (size=1)
0 =>
array (size=6)
0 => string 'к�' (length=3)
1 => string 'к�' (length=3)
2 => string 'к�' (length=3)
3 => string 'к�' (length=3)
4 => string 'к�' (length=3)
5 => string 'к�' (length=3)
С латынью работает все отлично. Вопрос как искать кирилицу.
И правильно, что пустой. В строке нет таких совпадений. Про регулярки и utf-8 тут
Должно вывести два номера, но опять же масив пустой. Хотя на сайте, где составляют регулярки показывает совпадение по 2 номерам.
Спасибо) Нужно было всего лишь добавить модификатор u
Отлично
Супер!
А я видимо вообще слишком упростил )). Конечно же если будет что то другое стоять то не сработает, но вроде как условие ДЗ выполнил.
Спасибо за урок, а обязательно делать буквенное ограничение для контроллера? id логично что будет в числовом представлении, а контроллеры именуются только буквами?
Как захотите, так и будут именоваться) Задание выполнено отлично.
Контроллер и id перепутаны местами. Куда спешим?)
спасибо, исправил.
Отлично
Для чего всё это? Дан был обычный роут, его надо было распарсить. Для чего обработка post.php? Почему id может быть пустым?
зачем .php опять?
Супер! Всё как надо
Отлично!
Отлично!
?
1) Нужно всегда делать проверку $matches на пустоту. Если будет использоваться в роутинге, и введут неправильный адрес, то выдаст большой блок ошибок.
2) Вместо точки, посередине регулярки, лучше поставить слеш, так как это всё таки урл, и может появиться запись типа: "post-php" и всё собьётся
3) В таких случаях лучше сразу использовать preg_match()
А вообще да, в конкретном случае работать будет
Угу, исправлю. По началу я ставил '/' и из за этого происходил сбой так как ограничители стоят '/'. Недавно после ДЗ узнал что можно использовать в качестве ограничителей любые символы. Спасибо за совет)
Мне кажется, надо регулярки раньше учить, а не когда весь курс прошёл) Тем более, так доступно написано, что можно просто продублировать в курс для начинающих
Их боятся, они страшные на первый взгляд)
они и впрямь страшные бяки :<
было сложновато это запомнить :<
Отлично!
Норм. Имена только не самые подходящие. Особенно article
Норм!
Один вопрос, а как сделать, чтобы код брал только первую часть адреса, если к примеру адрес такой post/title/892 ?
Выключал жадность, тогда в id идёт только одна цифра.
Добавить в паттерн символ конца строки - $ и включить жадность
Ну и в паттерне должна быть часть где тайтл
Отлично
Отлично!
Спасибо за уроки.
ДЗ
Отлично
или так
Отлично
Супер
Всем привет, подскажите а как обрабатывать регулярками следующую ситуацию
у меня есть массив маршрутов, я его перебираю в цикле на предмет совпадения с ```
$_SERVER['REQUEST_URI']
'blog/([a-z0-9_-]+)*$' => 'blog/category',