【发布时间】:2011-03-12 03:19:32
【问题描述】:
我正在阅读这个other question,它有一些非常好的正则表达式,但据我所知,它们都不能与 BASH 命令一起使用,因为 BASH 命令不支持如此复杂的正则表达式。
if echo "http://www.google.com/test/link.php" | grep -q '(https?|ftp|file)://[-A-Z0-9\+&@#/%?=~_|!:,.;]*[-A-Z0-9\+&@#/%=~_|]'; then
echo "Link valid"
else
echo "Link not valid"
fi
但这不起作用,因为 grep -q 不起作用......
编辑,好的,我刚刚意识到 grep 有一个“扩展正则表达式”(-E)选项,它似乎可以使它工作。但是,如果有人有更好/更快的方法,我仍然很乐意在这里讨论它。
【问题讨论】:
-
您可能想要检查您提出这个问题的动机。程序员尝试对 URL/URI 和电子邮件地址进行静态评估,您可以证明它们在语法上是有效的,但不会告诉您它们的可访问性。例如,
http://www.example.com/bogus#fragment将始终在语法上有效,并且(可能)始终返回 404 错误。 -
这个函数不需要知道链接是否有效,只知道它是一个链接。
-
从不定位资源的 URL 有什么用?为什么还要麻烦检查?
标签: bash url hyperlink validation