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

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top