Справка по регулярному выражению Preg_match
-
19-09-2019 - |
Вопрос
Привет, мне нужна небольшая помощь.
Вот существующий код preg_match:
preg_match("/(\/)([0-9]+)(\/?)$/", $_SERVER["REQUEST_URI"], $m);
который хорошо справляется с обнаружением post_id
в следующей строке URI:
http://www.example.com/health-and-fitness-tips/999/
Я считаю, что этого должно быть достаточно.
я меняю 999
, post_id
, к how-do-I-lose-10kg-in-12-weeks', the
post_title`, и вам необходимо изменить регулярное выражение pre_match, чтобы обнаружить новую строку.
Моей первой мыслью было просто добавить [a-z]- в конец регулярного выражения, создав следующее регулярное выражение:
"/(\/)([0-9][a-z]/-+)(\/?)$/"
Возможно, это так просто?Если нет, то что не так в вышесказанном?
Решение
Не совсем: ([0-9][a-z]/-+)
это «число, за которым следует буква, за которой следует хотя бы одно тире».
Вы хотите ([-0-9a-z]+)
.
Другие советы
я бы просто использовал \w
:
preg_match('!/([-\w]+)/?$!', $_SERVER['REQUEST_URI'], $m);
От Классы символов или наборы символов:
\w
обозначает «характер слова», обычно[A-Za-z0-9_]
.Обратите внимание на включение подчеркивания и цифр.
\w
означает слово, может состоять из букв как верхнего, так и нижнего регистра от A до Z и от a до z, цифр от 0 до 9 или _.Это эквивалентно [A-Za-z0-9_]
.Вы можете протестировать в онлайн-тестер здесь.