2011-07-18 16 views
3

私はこれらのようなURLの束を持っています。http://とwwwを削除する正規表現。 URLから

$urls = array(
    'https://site1.com', 
    'https://www.site2.com', 
    'http://www.site3.com', 
    'https://site4.com', 
    'site5.com', 
    'www.site6.com', 
    'www.site7.co.uk', 
    'site8.tk' 
); 

私は、HTTP、HTTPS、削除したい://とWWWを。これらの文字列から、出力がこれらのように見えるようにします。

$urls = array(
    'site1.com', 
    'site2.com', 
    'site3.com', 
    'site4.com', 
    'site5.com', 
    'site6.com', 
    'site7.co.uk', 
    'site8.tk' 
); 

私はこの解決策を思いついた。

foreach ($urls as $url) { 
    $pattern = '/(http[s]?:\/\/)?(www\.)?/i'; 
    $replace = ""; 
    echo "before: $url after: ".preg_replace('/\/$/', '', preg_replace($pattern, $replace, $url))."\n"; 
} 

私は2番目のpreg_replaceを避ける方法を知りました。何か案は?

答えて

13

preg_replaceもループを必要としないので、配列をとることもできます。あなたは1つのライナーでこれを行うことができます。

$urls = preg_replace('/(?:https?:\/\/)?(?:www\.)?(.*)\/?$/i', '$1', $urls); 
+2

+1、本当に素晴らしいです。 – sidyll

+0

賞金のPaulPROをありがとう、なぜ私はちょうど理由を理解していない。あなたの答えは完璧です。 – sidyll

+0

'$ urls = preg_replace( '〜^(?:https?://)?(?:www \。)?〜i'、 ''、$ urls);'。 –

13
/^(https?:\/\/)?(www\.)?(.*)\/$/i 

$3のものを使用してください。また、最初の2つのカッコを非キャプチャ版の(?:)に変更し、何を使用しているのかを変更してください。

0

はまさにそれはあなたが、すなわちparse_url、PHP自身のURL解析施設に固執する方が良いかもしれませんやりたい何であるかに応じて:

foreach ($urls as &$url) { 
    $url = preg_replace('~^www.~', '', parse_url($url, PHP_URL_HOST)); 
} 
unset($url); 

parse_urlは、ポート番号またはHTTP認証データが含まれていても、URLのホストを提供します。 (これは何が必要であるかどうか、しかしあなたの正確なユースケースによって異なります。)

0

ショートと甘い:

$urls = preg_replace('~^(?:https?://)?(?:www[.])?~i', '', $urls); 
関連する問題