Проверьте на действительную ссылку (URL)

Я читал, хотя этот другой вопрос, который имеет некоторый действительно хороший regex's для задания, но насколько я вижу не их, работает с командами Bash, поскольку команды Bash не поддерживают такой сложный rexeg's.

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 имел "расширенную-regex" (-E) опцию, которая, кажется, заставляет его работать. Но если бы у кого-либо есть лучший/быстрее путь, я все еще любил бы здесь об этом.

10
задан Community 23 May 2017 в 10:30
поделиться

2 ответа

Следующие действия работают в 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

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

21
ответ дан 3 December 2019 в 17:19
поделиться

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

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

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

РЕДАКТИРОВАТЬ : в ответ на ваше изменение в вопросе я не заметил, что это регулярное выражение также действует в «расширенном» синтаксисе. Я не думаю, что вы можете стать лучше / быстрее, чем это.

1
ответ дан 3 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: