0
regexp='^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(?!\S+http:\/\/)(?:\S*)$'

fURL()
{
       echo -n "Enter the YouTube URL to download: "
       read URL
       if [ "$URL" != "$regexp" ]; then
               echo "${red}Invalid YouTube URL!${normal}"
               fURL;
       fi
}

我用http://www.youtube.com/watch?v=tfTWHbtv_-Y测试我的脚本- 但它仍然说它无效。

我尝试修改代码:

echo $URL | grep "^http:\/\/(?:www\.)?youtube.com\/watch\?(?=[^?]*v=\w+)(?:[^\s?]+)?$"

if [ $? -ne "0" ]; then
    echo "${red}Invalid YouTube URL!${normal}"
    fURL;
else
    echo URL is good.  

有人可以帮忙吗?谢谢!

4

2 回答 2

2

You need to use =~ operation to compare against regexp.

于 2012-05-18T13:43:02.447 回答
0

问题出在你的正则表达式 - 你需要转义/

^http:\/\/(?:www\.)?youtube.com\/watch\?(?=.*v=\w+)(\S*)$

这将正确验证您的测试网址

表达式是一个示例,未使用所有可能的 URL 进行测试

于 2012-05-18T14:02:13.077 回答