2016-07-07 16 views
1

Ich möchte bestimmte Tld-Domain auf meiner Zeichenfolge entfernen, aber ich habe ein paar Probleme.php entfernen Top-Level-Domain mit preg_replace

$MyString = 'Amazon.com: pada port .com3 Dog Name Tags.com googl.com™ any.com™ on mys.co.uk® end.Commando is .commitment.com & communism.ca'; 
echo preg_replace('~\.(com|info|us|org|top|xyz|co\.in|co\.uk|ca|mobi)(?:[^a-z\d]|$)~i', '', $MyString);` 

die Code-Ausgabe ist

Amazon pada port .com3 Dog Name Tagsgoogltrade; any on mys end.Commando is .commitment& communism 

Ausgabe, die i

Amazon: pada port .com3 Dog Name Tags googl® any™ on mys® end.Commando is .commitment & communism 
+0

'([^ az \ d] | $?)' Werden die zusätzlichen Zeichen übereinstimmen und löschen Sie sie, da du bist sie nicht in die Ersatzzeichenfolge einfügen. –

+0

wenn ich entferne (?: [^ A-z \ d] | $) => .com3 wird auch entfernt – DnKurnia1

+1

was ist zu sagen, dass .com3 kein gültiges tld ist? icann erlaubt heutzutage fast alles, einschließlich Küchenspülen, als TLDs. Sie können nicht eine einfache Regex verwenden, um zu filtern, was im Wesentlichen eine ewig wechselnde Liste von möglichen Tlds ist –

Antwort

0

Das Problem ist üblich wollen: Sie nicht-einfangende Gruppe (?:[^a-z\d]|$), die tatsächlich eats raubend verwendet bis ein char anders als ein alphanumerisches oder Ende der Zeichenfolge und es fehlt somit in der preg_replace Ausgabe.

eine Wortgrenze Verwenden Sie stattdessen:

$MyString = 'Amazon.com: pada port .com3 Dog Name Tags.com googl.com® any.com™ on mys.co.uk® end.Commando is .commitment.com & communism.ca'; 
echo preg_replace('~\.(com|info|us|org|top|xyz|co\.in|co\.uk|ca|mobi)\b~i', '', $MyString); 

Siehe ein PHP online demo