0

この質問をするスレッドが無数にあることは知っていますが、これを支援できるスレッドを見つけることができませんでした。

私は基本的に約10,000,000のURLのリストを解析しようとしています。それらが次の基準に従って有効であることを確認してから、ルートドメインのURLを取得します。このリストには、次のようなもの(および予想されるフォーマットされたURL)を含む、想像できるほぼすべてのものが含まれています。

biy.ly/test [VALID] [return - bit.ly]
example.com/apples?test=1&id=4 [VALID] [return - example.com]
host101.wow404.apples.test.com/cert/blah [VALID] [return - test.com]
101.121.44.xxx [**inVALID**] [return false]
localhost/noway [**inVALID**] [return false]
www.awesome.com [VALID] [return - awesome.com]
i am so awesome [**inVALID**] [return false]
http://404.mynewsite.com/visits/page/view/1/ [VALID] [return - mynewsite.com]
www1.151.com/searchresults [VALID] [return - 151.com]

誰かがこれについて何か提案がありますか?

4

4 に答える 4

15
^(?:https?://)?(?:[a-z0-9-]+\.)*((?:[a-z0-9-]+\.)[a-z]+)

説明

^                # start-of-line
(?:              # begin non-capturing group
  https?         #   "http" or "https"
  ://            #   "://"
)?               # end non-capturing group, make optional
(?:              # start non-capturing group
  [a-z0-9-]+\.   #   a name part (numbers, ASCII letters, dashes) & a dot
)*               # end non-capturing group, match as often as possible
(                # begin group 1 (this will be the domain name)
  (?:            #   start non-capturing group
    [a-z0-9-]+\. #     a name part, same as above
  )              #   end non-capturing group
  [a-z]+         #   the TLD
)                # end group 1 

http://rubular.com/r/g6s9bQpNnC

于 2012-05-03T16:38:12.433 に答える
2

私はデフォルトから始めます:

filter_var($inputUrl, FILTER_VALIDATE_URL);

次に、さらなる検証に受け入れられないものの特別なケースを追加します。これは少し単純化する必要があります。

ホストの取得について。

parse_url($inputUrl, PHP_URL_HOST);
于 2012-05-03T17:35:40.267 に答える
0

^(([a-zA-Z](\.[a-zA-Z])+)|([0-9]{1,3}(\.[0-9]{1,3}){3})/.*$

編集

PHPではそれはpreg_match ( '^(([a-zA-Z](\.[a-zA-Z])+)|([0-9]{1,3}(\.[0-9]{1,3}){3})/.*$' , $myUrls , $matches)

必要なものは$matches[1]

于 2012-05-03T16:28:48.547 に答える
0
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$w$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
  {
  $websiteErr = "Invalid URL";
  }ebsite))
  {
  $websiteErr = "Invalid URL";
  }
于 2013-10-16T12:45:17.387 に答える