views:

217

answers:

4

I have been looking around for a regex expression that will spit out just the 'stackoverflow' part and no www. or .com etc. All I could find was to check if the url's were valid... I have used php's url filter to determine that much I now am looking to determine which site it is.

I have never written an expression before so I am hoping someone can check it/recommend a better solution.

preg_match('@^(?:http://)(?:www.)?([^.]+)@i', $url, $matches)

edit: All the url's I am dealing with are .com if that helps

A: 

If you know that the thing you're having is a URL and the domain end in .com a simple thing like

preg_match('#([^\.]*)\.com#', $url, $matches);

should do the trick.

While this will fail on a domain like www.com.foo.com but might be enough, depending on your situation.

johannes
A: 
preg_match('#https?://(?:www.)?(.*?)\.com#i', $str, $match);
kemp
+4  A: 

Have you considered PHP's parse_url() function?

Sbm007
the function is really great.... except it still leaves me with sometimes being 'www.' and sometimes no 'www.' so I will still have to preg_replace the www.
Mark
+1  A: 

one-liner without using regular expressions!!!

$url = 'http://stackoverflow.com';
$d = array_shift( explode( '.', str_replace('www.', '', parse_url( $url, PHP_URL_HOST )) ) );
echo $d;
Galen
haha... its only a one liner because you stuck it all in one line :) Regardless it works well. Its the best so far.
Mark