Исключить лишние попадания в список при парсинге ссылок

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
128
Благодарностей
27
Баллы
28
Всем здравствуйте!
Столкнулся с задачей собрать все внутренние ссылки на страничке сайта.
Есть регулярка, которая их собирает
{-Variable.Url-}.*(?=")

Например находит четыре вида значений:
domain.ru\/
domain.ru
domain.ru
domain.ru/home
domain.ru/contact

И все их можно положить сразу в список, но мне необходимо, чтобы в список легли только 4 и 5 значения. Т.е. не нужен сам домен, который равен переменной {-Variable.Url-} и не нужно значение, которое равно {-Variable.Url-}\/
Это можно реализовать как-нибудь одним кубиком?
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Код:
{-Variable.Url-}/.*(?=")
 
  • Спасибо
Реакции: Ssmodey

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
128
Благодарностей
27
Баллы
28
  • Спасибо
Реакции: Mikhail B.

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
128
Благодарностей
27
Баллы
28
Код:
{-Variable.Url-}/.*(?=")
Хотя, есть маленький нюанс, значение domain.ru\/ я привёл как пример, когда есть два разных слеша подряд. И, если будет domain.ru\/home\/ на входе, то его не возьмёт
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Код:
domain\.ru(/|\\/\w).*(?=")
Если опять не подойдет. То скидывайте по больше примеров.
 
  • Спасибо
Реакции: Ssmodey

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
128
Благодарностей
27
Баллы
28
Код:
domain\.ru(/|\\/\w).*(?=")
Если опять не подойдет. То скидывайте по больше примеров.
Да, подошло, спасибо!
Я просто указал значения, которые на выходе получаются. Наверное лкчше было бы ещё казать, что и на входе...

Правда, вот так получше будет, т.е. брать самое короткое значение, чтобы не бралось лишнее, если атрибуты тегов идут и после url
Код:
domain\.ru(/|\\/\w).*?(?=")
Ей богу, но возник ещё один пример, когда тестировал Вашу регулярку... Можно ли как-то в неё добавить ещё и эту конструкцию, но чтобы и предыдущие работали корректно? Тут как и в предыдущих, достаточно domain.ru\/regles
<span style=\"\">www.domain.ru\/regles<\/span>

P.S. Если честно, то я впервые вижу такой говнокод :bm:
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
Используйте конструкцю или. " или < будет выглядеть так ("|<)
Соответственно регулярка будет такой
Код:
domain\.ru(/|\\/\w).*(?=("|<))
 

Ssmodey

Client
Регистрация
10.12.2016
Сообщения
128
Благодарностей
27
Баллы
28
Используйте конструкцю или. " или < будет выглядеть так ("|<)
Соответственно регулярка будет такой
Код:
domain\.ru(/|\\/\w).*(?=("|<))
Понял, теперь всё понятно, через | задаются варианты. Получается, если ещё поставить вопрос после звёздочки, на поиск самого короткого совпадения, то будет браться самое короткое из двух или, верно?
В то время, если его не ставить, то будет браться ближайшее?

И, тогда, имеет смысл вот так делать
Код:
domain\.ru(/\w|\\/\w).*(?=("|<))
Или достаточно одного?

В то же время вот эти слеши непонятны, они не лишние?
http://prntscr.com/lpih7b
 
Последнее редактирование:

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 417
Благодарностей
5 454
Баллы
113
самое короткое из двух или, верно?
В то время, если его не ставить, то будет браться ближайшее?
Вот тут уже не могу ответить. Тестируйте в конструкторе.

В то же время вот эти слеши непонятны, они не лишние?
Нет не лишние. Это экранирование. Что бы увидеть экранирование добавьте слеши в конструктор регулярок и увидите как они экранируются.
 
  • Спасибо
Реакции: Ssmodey

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)