Regex (regular expression) to match a URL


 / Published in: PHP
 

This regular expression matches a URL.

  1. https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?
  2.  
  3. PHP Example: Automatically link URL's inside text.
  4.  
  5. $text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);

Report this snippet  

Comments

RSS Icon Subscribe to comments
Posted By: hathrill on August 20, 2009

Exactly what I needed. I heart you.

Posted By: jpo on September 1, 2009

Perfect. Thank you!

Posted By: cjastram on October 21, 2009

Perfect for copy-and-paste. Very nice regex, thank you! -cej102937

Posted By: goozak on November 10, 2009

Great regex, thanks ! Small thing : the '-' (dash) is missing - URL like this fails (http://web5.uottawa.ca/admingov/reglements-methodes.html)

Posted By: goozak on November 10, 2009

Great regex, thanks ! Small thing : the '-' (dash) is missing - URL like this fails (http://web5.uottawa.ca/admingov/reglements-methodes.html)

Posted By: inhahe on November 28, 2009

it's also missing left parenthesis, right parenthesis, and comma.

Posted By: tannerc on December 18, 2009

Perfect! I spent the better part of this morning looking for a great URL matching snippet and finally found it here. Thank you!

Posted By: joshOiknine on January 14, 2010

Took me a few min to track this down on Google but it was exactly what I was looking for. Thank You.

Posted By: chicagowebdeveloper on March 30, 2010

Does this work with links that do not have the "http" or "https" in front of it. like ubuntu.com for example?

Posted By: keevkilla on July 9, 2010

I improved the regex given here, to take into account your comments : pregreplace('@((https?://)?(\w+.[-\w.]+)+\w(:\d+)?(/([-\w/.](\?\S+)?)?))@', '$1', $text);

Now with this regex, the links can be without any http:// or https:// block (like www.exemple.com) and can have multiple /folder/subfolder/file.htm after the domain, and finally "-" are considered as part as a standard URL.

Thanks for the first regex that helped me a lot find this one ! I hope mine will help the others.

Posted By: keevkilla on July 9, 2010

just replace the regex by '@((https?://)?(\w+.[-\w.]+)+\w(:\d+)?(/(-\w/.?)?))@' because in my last post, some characters are missing because of misinterpretation...

Posted By: keevkilla on July 9, 2010

Well it also removes the underscores... So I posted my contribution here : http://snipplr.com/view/36991/improvement-of-url-interpretation-with-regex/

Posted By: keevkilla on July 12, 2010

Last (but not least) change of snippet location : http://snipplr.com/view/36992/improvement-of-url-interpretation-with-regex/

You need to login to post a comment.