Substituir ligações locais, Mantenha Links Externos
-
06-09-2019 - |
Pergunta
Eu tenho uma chamada de API que, essencialmente, retorna o HTML de uma página do aplicativo wiki hospedado. Estou em seguida, fazer alguma substr, str_replace e preg_replace kung-fu para formatá-lo como por meus guias de estilo sites.
Eu faço um conjunto de chamadas para formatar meu nav esquerda (mudando um link para pageX ao meu wikiParse? Page = tipo pageX de coisa). Posso seguramente fazer isso na navegação à esquerda. No corpo do texto, no entanto, não posso seguramente assumir um link é um link para uma página interna. Ele poderia muito bem ser um link para um recurso externo. Então, eu preciso fazer um preg_replace que corresponde href = que não é seguido por http: //.
Aqui está a minha facada nele:
$result = preg_replace('href\=\"(?!http\:\/\/)','href="bla?id=',$result);
Este parece retirar todo o conteúdo da página. Qualquer um vê que eu escorregou? Eu não acho que eu sou muito longe, só não pode ver para onde ir.
Felicidades
Solução
O preg_*
funções esperar expressões regulares compatível com Perl (PCRE) . A diferença estrutural de expressões regulares normais é que a própria expressão é envolto em delimitadores que separam a expressão de possíveis modificadores . O delimitador clássico é o /
mas PHP permite que qualquer outro caractere não-alfanumérico, exceto o caractere de barra invertida. Veja também IntroduçãoHistóriaServiçoNossa para PCRE em PHP .
Então, tente o seguinte:
$result = preg_replace('/href="(?!http:\/\/)/', 'href="bla?id=', $result);
Aqui href="(?!http://)
é a expressão regular. Mas, como nós usamos /
como delimitadores, as ocorrências de /
dentro da expressão regular deve ser escapou usando barras invertidas.
Outras dicas
Seu regexp está faltando começando e terminando delimitadores (por padrão '/');
$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result);