Объясните регулярное выражение (?<=<a\ href=")http:.*?\.com(?=">)

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
Начинаю изучать, покопался по статьям, нашёл строчку из зеновского конструктора, но объяснения к ней не было.
вот давайте по символьно или по группам
1. из конструктора понятно, что (?<=<a\ href=") - указывает на то, что <a href=" идёт перед нужным нам текстом. - что непонятно - зачем пробел экранируется? и как пометасимвольно понимать "?<=" , просто ? - это же ставится после нужного нам символа и означает одно или ноль совпадений указанного предшествующего символа, или тут надо воспринимать все три символа как один метасимвол?
2. зачем то, что перед нужным и после - группируется и берётся в скобки - что это за правило?
3. http:.*?\.com - серединка - то что нам нужно начинается с http: , потом . т.е. любой символ, потом * , т.е. ноль или много раз, потом ? - что означает ноль или один раз, потом экранируется точка, т.е. заканчивается на .com . непонятно зачем нам там * после точки и ? после звёздочки , почему не .+ и всё.
4. "?=" - это метасимвол из двух знаков - означающий это идёт после искомого текста?

Заранее спасибо за ответы, как прочту объяснение обязательно плюсану.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Пригодиться.
Если не открывается, перенеси файл в браузер.
 

Вложения

  • Спасибо
Реакции: arhip1985

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
1,2 (?<= ) и т.д. - цельные конструции. И овспринимается как единое целое
3. ? после + или * означает самое короткое совпадение. Не будет его и может получится так, что у тебя будет не ссылка спаршенная, а целый кусок текста просто потому, что где-то там в конце есть подходящее условие.
4. Так же как и в 1. Есть ещё поиск с отрицанием. (?<! ) и (?! )
 
  • Спасибо
Реакции: arhip1985

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
3. ? после + или * означает самое короткое совпадение. Не будет его и может получится так, что у тебя будет не ссылка спаршенная, а целый кусок текста просто потому, что где-то там в конце есть подходящее условие.
4. Так же как и в 1. Есть ещё поиск с отрицанием. (?<! ) и (?! )
ага, спасибо, а то из таблички Михаила, совсем непонятно, что значит - не жадный, чё то сам не догадался по примеру из статьи, упустил момент про самое короткое совпадение.

кстати в табличке от Михаила указано, что поиск с отрицанием надо делать так 1. ?! - в конце 2. ?!= - в начале . у тебя немного по-другому, я так понял в той табличке есть примеры для других языков?

не понимаю - зачем экранировать пробел, иногда при поиске через контструктор указывается что ищется и там, если автоматом тоже вроде как экранируется, но когда я вставляю без экранирования, то тоже всё находится. В табличке от Михаила, указано, что пробелы экранируются, но зачем? это же не метасимвол?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
ага, спасибо, а то из таблички Михаила, совсем непонятно, что значит - не жадный, чё то сам не догадался по примеру из статьи, упустил момент про самое короткое совпадение.

кстати в табличке от Михаила указано, что поиск с отрицанием надо делать так 1. ?! - в конце 2. ?!= - в начале . у тебя немного по-другому, я так понял в той табличке есть примеры для других языков?

не понимаю - зачем экранировать пробел, иногда при поиске через контструктор указывается что ищется и там, если автоматом тоже вроде как экранируется, но когда я вставляю без экранирования, то тоже всё находится. В табличке от Михаила, указано, что пробелы экранируются, но зачем? это же не метасимвол?
скорее всего там ошибка. Никогда не встреча ?!=
Зачем экранировать пробел не знаю.
 
  • Спасибо
Реакции: arhip1985

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