2016-07-07 2 views
1

私の文字列で特定のtldドメインを削除したいのですが、いくつか問題があります。php 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);` 

コード出力が

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

私が欲しいの出力が

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

'(:[^ AZ \ D] | $?)'余分な文字にマッチしますし、あなたがしているので、それらを削除それらを置換文字列に入れないでください。 –

+0

もし私が削除したら(?:[^ a-z \ d] | $)= .com3も削除されます – DnKurnia1

+1

.com3は有効なTLDではありません。アイカンは最近、キッチンシンクを含め、ほとんどのものをTLDとして認めています。基本的に永遠に変化する可能性のあるリストをフィルタリングする単純な正規表現を使用することはできません –

答えて

0

問題が一般的ですです:あなたは、実際に食べるかかり非キャプチャグループ(?:[^a-z\d]|$)を使用文字列の英数字または末尾以外の文字です。したがって、にはありません。出力。

ではなく、単語の境界を使用します。

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

を参照してくださいPHP online demo

関連する問題