LINUX.ORG.RU

Регулярное выражение для url'ов

 


3

1

Добрый вечер. Не спешите закрывать, решение есть. Только вот почему-то распознает оно урлы довольно странно. https://google.com/ - работает https://google.com/asdasd - не работает

if [[ $file =~ ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$ ]]
        then echo "link detected :3"
        else echo "this is not link!"
fi

ЧЯДНТ?


Ответ на: комментарий от anonymous

Хм, действительно, а если не сложно, можете пояснить, как $ повлиял? Я не очень силен в регулярках, но ведь ^ и $ типо «начало» и «конец»..

USF
() автор топика
Ответ на: комментарий от USF

а ты посмотри, что получается на выходе:

then
  echo "link detected :3"
  for((i=0;i<${#BASH_REMATCH[@]};i++)); do
    echo "  $i:${BASH_REMATCH[$i]}"
  done
else

anonymous
()
Ответ на: комментарий от USF

Регулярка [\/\w \.-]* не матчит /asdasd, как пример:

[[ "hei" =~ \w+ ]] && echo "word"
не работает.

iVS ★★★★★
()

На баше сложно нормально такое лепить, если есть возможность, проще потянуть ruby / python (правда вроде не в коробке): ... | ruby -ruri -ne 'exit $_ =~ /^#{URI::regexp(["http","https"])}$/ || 1' Или выцепить оттуда regexp, вот тут из джанги.

anonymous
()
Ответ на: комментарий от anonymous

// Еще в ruby-варианте - жрет любой top-level domain, а валидные (вроде?) те, что определены icann; правда на локальном dns можно свои алиасы прописать. В джанговском - нет ipv6.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.