php使用preg_replace删除顶级域名

i want to remove certain tld domain on my string, but i got a few problem.

$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 );`

the code output is

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

output that i want is

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

The issue is common: you used a consuming non-capturing group (?:[^a-z\d]|$) that actually eats up a char other than an alphanumeric or end of string and it is thus missing in the preg_replace output.

Use a word boundary instead:

$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 );

See a PHP online demo