2010-07-16 12 views
5

Ok, quindi ho creato questa funzione che funziona bene per convertire la maggior parte degli URL come pies.com o www.cakes.com in un tag di collegamento reale.aiuto con regex - come posso fare alcuni URL no-follow?

function render_hyperlinks($str){  
    $regex = '/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org(\.uk)?|tv|biz|me)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie';  
    $str = preg_replace($regex,"'<a href=\"http://www.'.'$3'.'\" target=\"_blank\">'.strtolower('$3').'</a>'", $str); 
    return $str;  
} 

Vorrei aggiornare questa funzione per aggiungere no-follow tag ai link ai miei concorrenti,

così avrei alcune parole chiave (nome concorrente) per nofollow per esempio se il mio sito era di circa cottura potrei vogliono:

no-follow any sites with the phrases 'bakingbrothers', 'mrkipling', 'lyonscakes' 

è possibile attuare questo if(contains x){ add y} nel mio regex?

è ciò che viene chiamato "lookback"?

risposta

2

Forse preg_replace_callback è quello che state cercando:

function link($matches) 
{ 
    $str_return = '<a href="http://www.'.$matches[3].'" target="_blank"'; 
    if(in_array($matches[3], $no_follow_array)) 
    { 
     $str_return .= ' no-follow'; 
    } 
    $str_return .='>'.strtolower($matches[3]).'</a>'; 
} 

$regex = '/(http:\/\/)?(www\.)?([a-zA-Z0-9\-_\.]+\.(com|co\.uk|org(\.uk)?|tv|biz|me)(\/[a-zA-Z0-9\-\._\?&=#\+;]+)*)/ie';  
$str = preg_replace_callback($regex,'link', $str); 
+0

questo sembra ottima, tuttavia sto avendo problemi con i personaggi, sembra preg_replace_callback non accetta la 'e' modificatore, così ora sta catturando la 'n' form '\ n' nuove linee? – Haroldo

+0

Puoi fornire un esempio della stringa di input? Difficile costruire regexp cieca :) –

+0

ah è stato un mio errore, stavo fuggendo doppiamente dalle interruzioni di riga, la tua soluzione funziona in modo fantastico, e grazie anche a Marty per il suo aiuto anche – Haroldo