ajuda regex preg_match
-
19-09-2019 - |
Pergunta
Olá eu preciso de um pouco de ajuda.
Aqui está o código preg_match existente:
preg_match("/(\/)([0-9]+)(\/?)$/", $_SERVER["REQUEST_URI"], $m);
que faz um bom trabalho de detectar a post_id
na seguinte seqüência de caracteres URI:
http://www.example.com/health-and-fitness-tips/999/
Eu acredito que deve ser bastante fundo.
Eu estou mudando o 999
, o post_id
, para how-do-I-lose-10kg-in-12-weeks', the
post_title`, e necessidade de mudar o regex pre_match para detectar a nova cadeia.
Meu primeiro pensamento foi apenas para adicionar [a-z] - para o fim do regex fazer o seguinte regex:
"/(\/)([0-9][a-z]/-+)(\/?)$/"
É possivelmente tão simples assim? Se não, o que está errado com o acima?
Solução
Não é bem assim: ([0-9][a-z]/-+)
é "um número, seguido de uma letra, seguido por pelo menos um traço"
Você quer ([-0-9a-z]+)
.
Outras dicas
eu iria usar apenas \w
:
preg_match('!/([-\w]+)/?$!', $_SERVER['REQUEST_URI'], $m);
A partir Classes de caracteres ou conjuntos de caracteres :
\w
significa "caráter palavra", geralmente[A-Za-z0-9_]
. Observe a inclusão do sublinhado e dígitos.
\w
significa palavra, pode ser carta tanto maiúsculas e minúsculas de A a Z e A a Z, números de 0 a 9 ou _. É equivalente a [A-Za-z0-9_]
. Você pode testar no on-line tester aqui.