Регулярное выражение для разбора URL-адреса PHP

Мне нужно выяснить, действителен ли данный URL-адрес или нет, сценарий должен быть разрешен, если он содержит URL-адреса haviing

1.Генерические домены верхнего уровня. 2. Домены верхнего уровня домена страны относятся к URL-адресу http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains.

Мне нужно сделать это на PHP, это в настоящее время то, что я делаю

     $ regexUrl = "((https? | ftp) \: \ / \ /)?";  // СХЕМА 
     $ regexUrl. = "([a-zA-Z0-9 +! * (),; & = \ $ _.-] + (\: [a-zA-Z0-9 +! * (),;? ? & = \ $ _.-] +) @)? ";  // Пользователь и пропуск 
     $ regexUrl. = "([a-zA-Z0-9 -] +) \. ([a-zA-Z] {2,3})";  // Хост или IP-адрес 
     $ regexUrl. = "(\: [0-9] {2,5})?";  // Порт 
     $ regexUrl. = "(\ / ([a-zA-Z0-9 + \ $ _-] \.?) +) * \ /?";  // Дорожка 
     $ regexUrl. = "(\? [a-zA-Z + & \ $ _.-] [a-zA-Z0-9;: @ &% = + \ / \ $ _.-] *)?";  // GET Query 
     $ regexUrl. = "(# [a-zA-Z_.-] [a-zA-Z0-9 + \ $ _.-] *)?";  // Якорь 
     ? // если (preg_match_all ( "# \ bhttps: // [^ \ s ()] + (: \ ([\ ш \ г] + \) | ([^ [: пунктуатором] \ s] | /? )) # ", $ message, $ matches1, PREG_PATTERN_ORDER))
     // $ pattern = '/ ((https? | ftp) \: (\ / \ /) | (файл \: \ / {2,3}))? (((25 [0-5] | 2 [0 -4] [0-9] | [01] [0-9] [0-9]) \) {3} (25 [0-5] |?. 2 [0-4] [0-9] | [01] [0-9] [0-9])) |? (((([A-Za-Z0-9] +) (\).?) +) (\) (ком |. орг | чистая | г | млн | бизнес | информация | моби | имя | аэро | работа | музей | [AZ] {2})) ([\ /] [. \ / A-Za-Z0-9 \] *) * ([\ /]? (([\] [A-Za-Z0-9] + [\ =] [A-Za-Z0-9 \% \ (\)] *) ([\ &] [а ? -zA-Z0-9] + [\ =] [A-Za-Z0-9 \% \ (\)] *) *)) / ';
     if (preg_match_all ("/ $ regexUrl /", $ urlMessage, $ matches1, PREG_PATTERN_ORDER))
     {
       пытаться
         {
             foreach ($ matches1 [0] как $ urlToTrim1)
             {
                 $ url = $ urlToTrim1;
                 echo $ url;
             }
         }
         catch (Исключение $ e)
         {
             $ URL = "- 1";
         }
     }

Чтобы выяснить, действительно ли это действительный URL-адрес:

filter_var($url, FILTER_VALIDATE_URL) 

http://www.php.net/manual/en/function.filter-var.php

Если вы хотите подтвердить, что TLD находится в вашем утвержденном списке (я не знаю, идет ли filter_var чтобы проверить, действительно ли существует ДВУ):

 $host = parse_url($url, PHP_URL_HOST); $tld = substr($host, strrpos($host, '.') + 1); // check if $tld is in a list of allowed TLDs 

Или просто попробуйте найти DNS-запись домена, используя gethostbyname . Если он существует, это действительный домен. *


* Если вы не подменены DNS, если этот случай важен для вас …