AN_ANT
@AN_ANT

Как применить регулярное выражение?

Применяю регулярное выражение для парсинга всех ссылок и картинок в тексте:
(([A-Za-z.-_]+)\.([\/.A-Za-z0-9-_#=&;%+]{0,})\.([\/.A-Za-z0-9-_#=&;%+]{0,}))


Все ссылки, типа таких:
sk.ru/news/b/photos/archive/2016/11/11/vorkshop-po...

Или схожих картинок - парсятся успешно, разбиваются на части, в том числе, на расширения. Все как надо!

Проблема лишь в том, что выражения типа: 'p.s.' тоже за ссылку считаются.. Как их можно исключить?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
[A-Za-z.-_]+ означает любое коничество символов, состоящее из букв, дефисов, точек и подчеркиваний. т.е. как минимум стоит добавить сюда цифры. сейчас 2gis.ru, к примеру, не распарсится.
ну и можно ввести количество символов после точки, домен классически от 2 до 4 символов. Сделаете "2 и больше" - уже p.s. отбросится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
impwx
@impwx
Разработчик
Самое близкое - перечислить список возможных доменов первого уровня, например так:

([a-zA-Z0-9-]+\.)+(com|net|org|ru|...)

В последние годы дело осложняется популярностью gTLD и nTLD. Вот например, строка "my.coffee" - это домен или пропущенный пробел? Оказывается, его можно зарегистрировать.

Для надежности я бы поступал так - если строка начинается с www, http или имеет слэши, скорее всего это ссылка и там можно использовать любой домен. Если просто строка из двух слов, разделенных точками - то смотреть по ограниченному списку известных доменов первого уровня.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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