Regex: Temukan tag html tertentu yang berisi kata-kata ini (string)

Aug 19 2020

Saya memiliki tag ini:

<span class="text_obisnuit2">* Not&#259;:</span>John Wells - <em>My Dreams</em>, Albatros Books, 1986.</p>

dan yang satu ini:

<span class="text_obisnuit1">* Not&#259;:</span>Mariah Carey - <em>Lovers on the road</em>, BackStreet Books, 1965.</p>

Jadi, saya ingin menemukan tag html tertentu <span class="text_obisnuit2">yang berisi kata-kata ini (string): Albatrosdan <em>dan </em>(Baris pertama)

Jawaban

4 Glorfindel Aug 19 2020 at 16:49

Ini sangat mudah, tetapi membutuhkan 'Albatros' untuk muncul setelah <em>tag ( demo ):

(<span class="text_obisnuit2">).*<em>.*<\/em>.*Albatros.*

Yang berikut tidak peduli urutannya ( demo ):

(<span class="text_obisnuit2">).*(<em>.*<\/em>.*Albatros.*|Albatros.*<em>.*<\/em>.*)

Berikut adalah variasi lain, di mana digit setelah text_obisnuittidak penting dan seluruh spantag ditangkap sebagai grup pertama ( demo ):

(<span class="text_obisnuit\d+">.*<\/span>).*(<em>.*<\/em>.*Albatros.*|Albatros.*<em>.*<\/em>.*)

Semua ekspresi reguler menganggap entri masing-masing pada barisnya sendiri di file. Mungkin lebih masuk akal untuk mendeteksi <p>dan </p>sebagai batasan, tetapi untuk itu kami perlu memiliki kutipan yang lebih besar dari file input Anda.

4 Toto Aug 19 2020 at 17:01
  • Ctrl+F
  • Menemukan apa: <span class="text_obisnuit2">(?=.*?<em>.*?</em>)(?=.*?\bAlbatros\b).*$
  • PERIKSA Bungkus sekitar
  • PERIKSA Ekspresi reguler
  • UNCHECK . matches newline
  • Find All in Current Document

Penjelasan:

<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

Tangkapan layar: