Проблема с регулярным выражением "Заглядывание в прошлое" (Ruby)

Я написал это регулярное выражение, чтобы соответствовать всем href а также src ссылки на HTML-странице; (Я знаю, что должен использовать парсер; это просто эксперимент)

/((href|src)\=\").*?\"/ # Без оглядки

Это работает нормально, но когда я пытаюсь изменить первую часть выражения как шаблон для поиска:

/(?<=(href|src)\=\").*?\"/ # С оглядкой

Выдает ошибку с указанием "недопустимый шаблон поиска". Есть идеи, что не так с оглядкой назад?

1 ответ

Решение

У Lookbehind есть ограничения:

   (?<=subexp)        look-behind
   (?<!subexp)        negative look-behind

                      Subexp of look-behind must be fixed character length.
                      But different character length is allowed in top level
                      alternatives only.
                      ex. (?<=a|bc) is OK. (?<=aaa(?:b|cd)) is not allowed.

                      In negative-look-behind, captured group isn't allowed, 
                      but shy group(?:) is allowed.

Вы не можете поместить альтернативы не верхнего уровня в (отрицательный) взгляд сзади.

Поместите их на верхний уровень. Вам также не нужно избегать некоторых персонажей, которые вы сделали.

/(?<=href="|src=").*?"/
Другие вопросы по тегам