2010-04-08 7 views
3

Perl을 사용하여 웹 사이트 URL의 유효성을 검사하는 정규식이 필요합니다.Perl에서 웹 사이트 URL의 유효성을 검사하려면 어떻게해야합니까?

+0

자세한 정보가 필요합니다. 왜 그것을 필요로합니까? "웹 사이트 URL"이란 무엇입니까? – Jens

+1

왜 URL의 유효성을 검사해야합니까? 당신은 그들을 어디에서 얻고 있으며 당신은 그들과 무엇을하고 있습니다. –

+0

@Jens 웹 사이트 URL은 http 또는 https 서비스 식별자가 포함 된 URL을 의미한다고 생각합니다. 그렇지 않으면 urls에 다음과 같은 내용이 포함될 수 있습니다. news : alt.rec.motorcycle 또는 gopher : //gumby.brain.headache.edu : 151/7fonebook.txt – Mike

답변

3
use Regexp::Common qw /URI/; 
    while (<>) { 
     /($RE{URI}{HTTP})/  and print "$1 is an HTTP URI.\n"; 
    } 
+0

아마도 "HTTP URI입니다"가 더 좋은 예입니다. – ysth

+1

웹 사이트 URL은 HTTP 또는 HTTPS 일 수 있습니다. –

10

나는 정규 표현식을 사용하지 마십시오. 나는 URI 객체를 만들고 어떤 일이 일어나는지 보려고합니다. 그것이 작동한다면, 나는 스키마를 얻기 위해 질의 할 수있는 URI 객체를 가진다. (다른 것들은 "스키마가없는"URI로 바뀐다.) 내가 URI의 특정 종류를 찾고 있어요 경우

use URI; 

while(<DATA>) 
    { 
    chomp; 
    my $uri = URI->new($_, 'http'); 
    if($uri->scheme) { print "$uri is a URL\n"; } 
    else    { print "$uri is not a URL\n"; } 
    } 

__END__ 
foo.html 
http://www.example.com/index.html 
abc 
www.example.com 

, 나는 그것이 내가 같은 특정 도메인 이름으로, 무엇을해야 만족 있는지 확인하기 위해 객체를 조회 할 수 있습니다. URL을 사용하여 무언가를하고 있다면 어쨌든 객체를 만들려고합니다.

+0

@ 브라이언, 귀하의 스크립트가 제대로 보이지 않습니다. http 서비스 식별자가 없으면 www.example.com은 여전히 ​​유효한 URL이지만 스크립트는 그 반대라고합니다. – Mike

+2

호스트 이름은 URL이 아닙니다. 스키마가 없으면 www.example.com은 호스트 이름이나 파일 또는 다른 이름이 될 수 있습니다. 그 물건을 스스로 구별하는 마법은 없습니다. 물건의 내용과 의미를 나타내는 URL입니다. –

+0

글쎄, Regexp :: Common qw/URI/같은 것을 않습니다 보인다. 그러나 누군가가 http 식별자가없는 많은 수의 URL을 수동으로 작성해야한다면 그 URL이 유효하지 않다고 생각할 수 있습니까? – Mike

2

"웹 사이트 URL"에 대해 이야기하고 있으므로 HTTP 및 HTTPS URL에만 관심이있는 것으로 보입니다.

그 대신 regex를 사용하는 대신 Perl의 Data::Validate::URI 모듈을 사용할 수 있습니다. 어떤 잘 형식의 URI를 검증하기 위해, 마지막으로

print "Valid HTTP URL!" if $uriValidator->is_http_uri($url) 

:에만 HTTP URL을 검증하기 위해,

use Data::Validate::URI; 
my $url = "http://google.com"; 
my $uriValidator = new Data::Validate::URI(); 

print "Valid web URL!" if $uriValidator->is_web_uri($url) 

을 그리고 :

예를 들어, HTTP 및 HTTPS URL을 확인하는

print "Valid URI!" if $uriValidator->is_uri($url) 

대신 어떤 이유로 든 정규식을 원한다면 다음과 같이 유효성을 검사 할 수 있습니다 HTTP/HTTPS/FTP/SFTP URL :

print "Valid URL!\n" if $url =~ /^(?:(?:https?|s?ftp))/i; 
관련 문제