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 が正しく検証されます

式は、考えられるすべての URL でテストされていない例です

于 2012-05-18T14:02:13.077 に答える