Regex: найдите те конкретные теги HTML, которые содержат эти слова (строки)
У меня есть эти теги:
<span class="text_obisnuit2">* Notă:</span>John Wells - <em>My Dreams</em>, Albatros Books, 1986.</p>
и этот:
<span class="text_obisnuit1">* Notă:</span>Mariah Carey - <em>Lovers on the road</em>, BackStreet Books, 1965.</p>
Итак, я хочу найти те конкретные теги html, <span class="text_obisnuit2">
которые содержат эти слова (строки): Albatros
и <em>
и </em>
(первая строка)
Ответы
Это простой вариант, но он требует, чтобы "Альбатрос" располагался после <em>
тега ( демонстрация ):
(<span class="text_obisnuit2">).*<em>.*<\/em>.*Albatros.*
Следующему не важно, в каком порядке они находятся ( демо ):
(<span class="text_obisnuit2">).*(<em>.*<\/em>.*Albatros.*|Albatros.*<em>.*<\/em>.*)
Вот еще один вариант, в котором цифры после text_obisnuit
не имеют значения, а весь span
тег фиксируется как первая группа ( демонстрация ):
(<span class="text_obisnuit\d+">.*<\/span>).*(<em>.*<\/em>.*Albatros.*|Albatros.*<em>.*<\/em>.*)
Все регулярные выражения предполагают, что каждая запись находится в отдельной строке файла. Возможно, имеет смысл определять границы <p>
и </p>
в качестве границ, но для этого нам потребуется более крупный отрывок из входного файла.
- Ctrl+F
- Найти то, что:
<span class="text_obisnuit2">(?=.*?<em>.*?</em>)(?=.*?\bAlbatros\b).*$
- ПРОВЕРКА обтекать
- ПРОВЕРИТЬ Регулярное выражение
- НЕ ПРОВЕРИТЬ
. matches newline
- Find All in Current Document
Пояснение:
<span class="text_obisnuit2"> # literally
(?= # positive lookahead, make sure we have after:
.*? # 0 or more any character but newline, not greedy
<em> # literally open em tag
.*? # 0 or more any character but newline, not greedy
</em> # literally close em tag
) # end lookahead
(?= # positive lookahead, make sure we have after:
.*? # 0 or more any character but newline, not greedy
\bAlbatros\b # Albatros with word boundaries
) # end lookahead
.* # 0 or more any character but newline
$ # end of line
Снимок экрана:
