Проверьте правильность ссылки (URL) - PullRequest
7 голосов
/ 06 июля 2010

Я читал, хотя этот другой вопрос , в котором есть несколько действительно хороших регулярных выражений для работы, но, насколько я вижу, ни один из них не работает с командами 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 не работает ...

Edit , хорошо, я только что понял, что у grep есть опция "extended-regex" (-E), которая, кажется, заставляет его работать. Но если у кого-то есть способ получше / быстрее, я бы с радостью рассказал об этом.

Ответы [ 3 ]

18 голосов
/ 06 июля 2010

Следующее работает в Bash> = версия 3.2 без использования grep:

regex='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]'
string='http://www.google.com/test/link.php'
if [[ $string =~ $regex ]]
then 
    echo "Link valid"
else
    echo "Link not valid"
fi

Ваше регулярное выражение не содержит строчных букв [a-z], поэтому я добавил их сюда.

1 голос
/ 20 марта 2019

Так как мне не хватает представителя, чтобы комментировать выше, я собираюсь исправить ответ, данный Деннисом выше, на этот.

Я включил обновление Кристофера в регулярное выражение, а затем добавил к нему больше, так чточто URL должен быть хотя бы в следующем формате:

http://w.w (должен иметь точку в нем).

И немного настроить вывод:)

regex='^(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]\.[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]$'

url='http://www.google.com/test/link.php'
if [[ $url =~ $regex ]]
then 
    echo "$url IS valid"
else
    echo "$url IS NOT valid"
fi
1 голос
/ 06 июля 2010

Возможно, потому что регулярное выражение написано в синтаксисе PCRE.Посмотрите, есть ли у вас (или вы можете установить) программу pcregrep в вашей системе - она ​​имеет тот же синтаксис, что и grep, но принимает Perl-совместимые регулярные выражения - и вы должны быть в состоянии заставить это работать.

Другой вариант - попробовать опцию -P для grep, но на странице руководства написано, что это «очень экспериментально», поэтому она может или не может работать на самом деле.

Я скажу, что вы должны тщательно подумать о том,это действительно уместно использовать это или любое регулярное выражение для проверки URL.Если вы хотите получить правильную проверку, вам, вероятно, будет лучше найти или написать небольшой скрипт, например, на Perl, чтобы использовать средства проверки URL языка.

EDIT : В ответ на ваше изменение в вопросе я не заметил, что это регулярное выражение также допустимо в «расширенном» синтаксисе.Я не думаю, что вы можете стать лучше / быстрее, чем это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...