2010-07-16 13 views
5

Ok, also habe ich diese Funktion gemacht, die gut funktioniert für die Umwandlung der meisten URLs wie pies.com oder www.cakes.com zu einem tatsächlichen Link-Tag.Hilfe mit Regex - Wie kann ich einige URLs no-follow machen?

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;  
} 

Ich mag würde diese Funktion aktualisieren no-follow Tags Links zu meinen Konkurrenten,

hinzufügen

so würde ich bestimmte Keywords (Wettbewerber Namen) zum Beispiel auf nofollow, wenn meine Website zu backen war vielleicht i wollen:

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

ist es möglich, diese if(contains x){ add y} in meine regex zu implementieren?

ist das, was ein "Lookback" genannt wird?

Antwort

2

Vielleicht preg_replace_callback ist, was Sie suchen:

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

dies aber sieht gut aus Ärger Ich habe mit Zeichen, wie es scheint preg_replace_callback nicht das ‚e‘ Modifikator nicht akzeptiert, so jetzt ist es die Erfassung 'n' Form '\ n' neue Zeilen? – Haroldo

+0

Können Sie ein Beispiel für Ihre Eingabezeichenfolge angeben? Schwer zu bauen blind regexp :) –

+0

ah es war mein Fehler, ich war doppelt entkommen die Zeilenumbrüche, funktioniert Ihre Lösung fantastisch, und danke auch an Marty für seine Hilfe zu – Haroldo