ดังนั้นฉันจึงมีไฟล์ html ที่มีสิ่งต่อไปนี้อยู่ตรงกลาง:
<span dir="ltr">http:(...).com</span>
ฉันพยายามแยก URL แต่ฉันมีปัญหาบางอย่างในการทำเช่นนั้น เนื่องจาก "ltr" นั้นเป็นตัวเดียวที่มีอยู่ใน html ฉันจึงคิด regex นี้ขึ้นมา:
(?<=ltr">)(.*)(?=<\/span>)
การใช้ regex101 ฉันยืนยันว่านิพจน์ regex ใช้งานได้ อย่างไรก็ตาม เนื่องจากวิธีการจัดการกับเครื่องหมายคำพูดและเครื่องหมายคำพูดคู่ ฉันคิดว่ามันอาจจะทำให้เกิดปัญหาบางอย่าง
ฉันกำลังลองสิ่งนี้:
- set_fact:
regex_test: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)') }}"
โดยที่ htmlres.content คือเนื้อหา html ที่ได้รับจากคำขอรับ http ที่ทำก่อนหน้านี้ใน playbook เดียวกัน
อย่างไรก็ตาม เรียกใช้:
- set_fact:
regex_pubdest: " {{ htmlres.content | regex_search('(?<=ltr">)(.*)(?=<\/span>)' }}"
^ ที่นี่
มีวิธีใดบ้างที่จะหลีกเลี่ยงปัญหานี้ด้วยเครื่องหมายคำพูดใน regex ใน ansible ฉันจัดการเพื่อให้ได้ผลลัพธ์ที่ต้องการโดยทำสิ่งที่แตกต่างออกไปเล็กน้อย ซึ่งก็คือ:
เปลือก: grep -oP 'ltr">\K.*?(?=</span>)' /dir/htmlcontent.txt
ปัญหาคือก่อนหน้านี้ใช้ได้เฉพาะเมื่ออ่านจากไฟล์ และฉันพยายามหลีกเลี่ยงการบันทึก html.content ลงในไฟล์ก่อนที่จะส่ง regex ผ่าน ฉันได้ลองแทนที่เส้นทางไปยังโฟลเดอร์ใน grep ด้วย "{{html.content}}" แต่น่าเสียดายที่ทำให้ ansible ทำงานไม่ถูกต้องเนื่องจากเครื่องหมายคำพูด
ความคิดใด ๆ ?
ขอขอบคุณ!