#regex
#регулярное выражение
Вопрос:
Я пытаюсь захватить слова в ссылке, если они содержат определенное слово, в случае «политика».
Например:
<a href="https://website/wp-content/uploads/2020/08/Policy-October-2018.pdf" target="_blank" rel="noopener noreferrer">Nature Policy (pdf, 1.9MB)</a></p><p>
Я хочу захватить: Политика природы (pdf, 1.9МБ)
Мне удалось идеально захватить конечный бит, используя приведенное ниже регулярное выражение, но я не могу заставить его начинаться с первого символа>.
Мое регулярное выражение:
(?i)[^">]*bPolicyb. ?(?=<)
Ответ №1:
В идеале вы никогда не должны использовать регулярное выражение для разбора вложенного содержимого, такого как HTML. При этом, если ваш вводимый текст всегда будет содержать только один не вложенный тег привязки <a>
, тогда должен работать следующий шаблон регулярных выражений:
<a[^>] >([^<]*bPolicyb[^<]*)</a>
ДЕМОНСТРАЦИЯ
Этот шаблон работает путем захвата в первой группе захвата текстового содержимого внутри тега привязки при условии, что это текстовое содержимое содержит слово Policy
.
Ответ №2:
Я считаю, что это работает:
(?<=>). ?bPolicyb. ?(?=<)
Я изменил начало, чтобы использовать положительный просмотр назад ( (?<=>)
), который соответствует >
а затем . ?
, который вы уже используете после слова Policy
.
Демонстрация: https://regex101.com/r/sWNphQ/2