我正在尝试完成我的任务,最后一个是验证网址
要求如下:
url只允许使用字母数字字符和以下内容:/。〜?= +&连续两个时期不能存在。
这是我到目前为止所做的但它不起作用
m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|
那么现在发生的事情就是我输入它只是通过了我做的匹配过程,就像这样
$return = $search =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
因此即使我只是在搜索框中输入任何内容,它也总是对我来说是真实的。
答案 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 '('
?: