регулярное выражение для извлечения ссылки из URL - PullRequest
2 голосов
/ 15 апреля 2020
x='http://example.bol.com/click/click?p=1&t=url&s=IDHERE&url=https://www.bol.com/nl/p/jbl-e55bt-draadloze-over-ear-koptelefoon-zwart/9200000064299118&f=TXL&name=/koptelefoon/'

x1='https://example.net/click/camref:IDhere/destination:https://www.mywebsite.com/product/138/sony-ps4.html&q=electronics'

x2='https://example.hn/clickbtn/camref:IDhere/creativeref:IDHERE/destination:https://www.coolblue.nl/product/465/sony-ps4-zwart'

мое регулярное выражение до сих пор https?:\/\/www.(?:mywebsite|coolblue|bol)\.(?:com|nl)(?:\/|\?).*?(?:\.html|\.php|\&)

У меня есть 2 небольшие проблемы, как мне сделать так, чтобы скороговорка не включала "&" (останавливается прямо перед первым &) и захватывать x2 ссылка

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Вот измененное регулярное выражение:

https?:\/\/www.(?:mywebsite|coolblue|bol)\.(?:com|nl)(?:\/|\?).*?(?=&|') 

Сначала я удалил последнюю часть вашего регулярного выражения, поскольку она не нужна.

Затем я добавил:

(?=&|') 

Это так называемый positive look ahead - начинается с (?= и заканчивается )

То, что он делает, это то, что смотрит вперед (вправо), чтобы соответствовать тому, что находится в парентесе, здесь ampersand (&) ИЛИ single quote ('). Однако это НЕ добавляет это совпадение к окончательному совпадению с регулярным выражением, оно только «смотрит».

Здесь много сообщений о регулярном выражении для поиска дополнительной информации о «положительном взгляде вперед».

0 голосов
/ 15 апреля 2020

Чтобы получить все совпадения из данных примера, вы можете использовать класс символов с отрицанием [^&\s]* для сопоставления с любым символом, кроме & или символ пробела после сопоставления / или ?

https?:\/\/www\.(?:mywebsite|coolblue|bol)\.(?:com|nl)[\/?][^&\s]*

Пояснение

  • https?:\/\/www\. Соответствует протоколу с дополнительными s и обязательными www. part
  • (?:mywebsite|coolblue|bol) Совпадение с одной из альтернатив
  • \.(?:com|nl) Совпадение с точкой (примечание, чтобы убежать от точки) и либо com, либо nl
  • [/?] Совпадение либо /, либо ?
  • [^&\s]* Совпадение 0 или более вхождений любого символа, кроме & или символа пробела

Regex demo

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