正则表达式验证perl中的URL

时间:2012-08-13 03:06:09

标签: regex perl validation

我正在尝试完成我的任务,最后一个是验证网址

要求如下:

url只允许使用字母数字字符和以下内容:/。〜?= +&连续两个时期不能存在。

这是我到目前为止所做的但它不起作用

m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|

那么现在发生的事情就是我输入它只是通过了我做的匹配过程,就像这样

$return = $search =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;

因此即使我只是在搜索框中输入任何内容,它也总是对我来说是真实的。

2 个答案:

答案 0 :(得分:2)

也许可以如下工作:

use Data::Dumper;
$url = 'http://stackoverflow.com/questions/11927730/regular-expression-validate-url-in-perl';
@ds = $url =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
print Dumper(\@ds);

输出:

$VAR1 = [
          'http',
          'stackoverflow.com',
          '/questions/11927730/regular-expression-validate-url-in-perl',
          undef,
          undef
        ];

答案 1 :(得分:2)

以下是我从我的正则表达式湍流器(很快将成为商业产品)中获得的信息

没有小组计数

 (?:                                                 #(.*))?
      ( [^:/?\#]+ )
      :
 )?
 (?:
      //
      ( [^/?\#]* )
 )?
 ( [^?\#]* )
 (?:
      \?
      ( [^\#]* )
 )?
      (  <-- Unbalanced  '('
      ?:

小组计数

     (?:                                                 #(.*))?
1         ( [^:/?\#]+ )
          :
     )?
     (?:
          //
2         ( [^/?\#]* )
     )?
3    ( [^?\#]* )
     (?:
          \?
4         ( [^\#]* )
     )?
          (  <-- Unbalanced  '('
          ?:
相关问题