Regex: ค้นหาแท็ก html เฉพาะที่มีคำเหล่านี้ (สตริง)

Aug 19 2020

ฉันมีแท็กนี้:

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

และอันนี้:

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

ดังนั้นฉันต้องการที่จะหาแท็กเหล่านั้นโดยเฉพาะอย่างยิ่ง<span class="text_obisnuit2">ที่มีคำเหล่านี้ (สตริง) Albatrosและ<em>และ</em>(บรรทัดแรก)

คำตอบ

4 Glorfindel Aug 19 2020 at 16:49

นี่เป็นวิธีที่ตรงไปตรงมา แต่ต้องใช้ 'Albatros' อยู่หลัง<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>.*)

regexes ทั้งหมดถือว่าแต่ละรายการอยู่ในบรรทัดของตัวเองในไฟล์ บางทีมันอาจจะสมเหตุสมผลกว่าที่จะตรวจจับ<p>และ</p>เป็นขอบเขต แต่สำหรับการนั้นเราจำเป็นต้องตัดตอนไฟล์ที่คุณป้อนออกให้มากขึ้น

4 Toto Aug 19 2020 at 17:01
  • Ctrl+F
  • หาอะไร: <span class="text_obisnuit2">(?=.*?<em>.*?</em>)(?=.*?\bAlbatros\b).*$
  • ตรวจสอบ รอบ ๆ
  • ตรวจสอบ นิพจน์ทั่วไป
  • UNCHECK . 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

ภาพหน้าจอ: