Pergunta

Eu tenho um monte de cordas, cada uma contendo uma marca de âncora e url.

string ex.

here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!

Eu quero analisar as marcas de âncora e tudo mais.

resultado ex.

here is a link. enjoy!

as urls no href = parte nem sempre coincidir com o texto do link no entanto (urls às vezes não são encurtados, texto, por vezes apenas descritivo).

eu estou tendo um momento extremamente difícil para descobrir como fazer isso tanto com expressões regulares ou funções PHP. Como posso analisar uma marca de âncora / link inteiro a partir de uma string?

Obrigado!

Foi útil?

Solução

Você não deve usar regex analisar HTML e usar um parser html em seu lugar.

Mas se você deve usar regex, e suas marcas de âncora conteúdo interno são garantidos para ser livre de html como </a>, e cada corda é garantido para conter apenas uma marca de âncora como no exemplo caso, então - só então - você pode Use algo como:

Substituir /^(.+)<a.+<\/a>(.+)$/ com $1$2

Outras dicas

Olhando para o seu exemplo resultado, parece que você está apenas removendo o tags / conteúdo - se você quiser manter o que você retirados ou não? Se não você pode estar procurando strip_tags() .

Uma vez que o seu problema parece ser muito específico, eu acho que isso deve fazê-lo:

$str = preg_replace('#\s?<a.*/a>#', '', $str);

apenas usar suas funções normais de cordas PHP.

$str='here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
$s = explode("</a>",$str);
foreach($s as $a=>$b){
    if( strpos( $b ,"href")!==FALSE ){
        $m=strpos("$b","<a");
        echo substr($b,0,$m);
    }
}   
print end($s);

saída

$ php test.php
here is a link . enjoy!
$string = 'here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
$text = strip_tags($string);
echo $text; //Outputs "here is a link . enjoy!"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top