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', thepost_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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top