<?php
function control_url($in) {
  // oude versie
  /*
  $start_url    = "(http(s)?\:\/\/)?";                // start URL
  $punten       = "([\w_-]{2,}\.)+";                  // een of meer delen met een . aan het einde
  $laatste_deel = "([\w_-]{2,})";                     // laatste deel bevat geen punt
  $user         = "((\/)(\~)[\w_-]+)?((\/)[\w_-]+)*"; // evt subdirectories - evt met user ~
  $eind         = "((\/)|(\/)[\w_-]+\.[\w]{2,})?";    // evt eindigend op een slash of slash+file+extensie
  $qstring1     = "((\?[\w_-]+\=([^\#]+)){0,1}";      // querystring - eerste argument (?a=b)
  $qstring2     = "(\&[\w_-]+\=([^\#]+))*)?";         // querystring - volgende argumenten (&c=d)
  $bkmrk        = "(#[\w_-]+)?";                      // bookmark

  $exp = "/^".$start_url.$punten.$laatste_deel.$user.$eind.$qstring1.$qstring2.$bkmrk."$/i";
  */

  // nieuwe(re) versie
  // NB: het is beter om de ? aan het einde van de volgende regel weg te laten
  // om er zeker(der) van te zijn dat je met een URL te maken hebt
  $start   = "(http(s)?:\/\/)?";                                             // http://
  $url     = "([\w_-]+)(\.[\w_-]+)*";                                        // www.bla.com
  $user    = "(\/\~[\w_-]+)?";                                               // userdir
  $eind    = "(\/[^\040\t\r\n\.\?]+(\.[^\040\t\r\n\.\?]+)*)*(\/)?";          // files en folders
  $qstring = "(\?[\w_-]+\=([^\#\040\t\r\n]+)(\&[\w_-]=[^\#\040\t\r\n]+)*)?"; // querystring
  $bkmrk   = "(#[\w_-]+)?";                                                  // bookmark

  $exp = "/^".$start.$url.$user.$eind.$qstring.$bkmrk."$/i";
  return preg_match($exp, $in);
}
?>

En zo kan je hem gebruiken:

<?php
if (control_url("http://www.sitemasters.be")) {
   echo "De URL is correct!\n";
}
?>