-1

我正在尝试完成我的任务,只有最后一个是验证 URL

要求如下:

url 只允许字母数字字符和以下 :/.~?=+& 两个句点不能连续存在。

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

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

那么现在发生了什么,我输入的任何东西都只是通过了我所做的匹配过程,就像这样

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

所以它总是对我返回 true,即使我只是在搜索框中输入任何内容。

4

2 回答 2

2

这是我从我的正则表达式湍流器中得到的(即将成为商业产品)

无组数

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

有组数

     (?:                                                 #(.*))?
1         ( [^:/?\#]+ )
          :
     )?
     (?:
          //
2         ( [^/?\#]* )
     )?
3    ( [^?\#]* )
     (?:
          \?
4         ( [^\#]* )
     )?
          (  <-- Unbalanced  '('
          ?:
于 2012-08-13T03:40:58.877 回答
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
        ];
于 2012-08-13T03:29:24.780 回答