Проблема с регулярным выражением "Заглядывание в прошлое" (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=").*?"/