Preg_match regex help - PullRequest
       13

Preg_match regex help

0 голосов
/ 05 октября 2009

Привет, мне нужна помощь.

Вот существующий код 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]/-+)(\/?)$/"

Возможно, это так просто? Если нет, что не так с вышесказанным?

Ответы [ 3 ]

2 голосов
/ 05 октября 2009

Не совсем: ([0-9][a-z]/-+) - это «число, за которым следует буква, за которой следует хотя бы один тире».

Вы хотите ([-0-9a-z]+).

0 голосов
/ 05 октября 2009

\w обозначает слово, может быть буквой как в верхнем, так и в нижнем регистре от A до Z и от a до z, от 0 до 9 или _. Это эквивалентно [A-Za-z0-9_]. Вы можете проверить в онлайн-тестере здесь.

0 голосов
/ 05 октября 2009

Я бы просто использовал \w:

preg_match('!/([-\w]+)/?$!', $_SERVER['REQUEST_URI'], $m);

Из Классы символов или наборы символов :

\w означает «символ слова», обычно [A-Za-z0-9_]. Обратите внимание на включение подчеркивания и цифры.

...