ไม่มีวันใดใน SO ที่ผ่านไปโดยไม่มีคำถามเกี่ยวกับการแยกวิเคราะห์ (X) HTML หรือ XML ด้วยนิพจน์ทั่วไปที่ถูกถาม
แม้ว่าจะค่อนข้างง่ายที่จะสร้างตัวอย่างที่แสดงให้เห็นถึงความไม่เป็นไปได้ของ regexes สำหรับงานนี้หรือด้วยชุดของนิพจน์เพื่อแสดงถึงแนวคิด แต่ฉันยังไม่พบคำอธิบายอย่างเป็นทางการเกี่ยวกับ SO ใน SO ว่าทำไมสิ่งนี้ถึงไม่สามารถทำได้ในคนธรรมดา เงื่อนไข
คำอธิบายที่เป็นทางการเพียงอย่างเดียวที่ฉันสามารถพบได้ในเว็บไซต์นี้อาจถูกต้องมาก แต่ก็ค่อนข้างคลุมเครือสำหรับโปรแกรมเมอร์ที่เรียนรู้ด้วยตนเอง:
ข้อบกพร่องที่นี่คือ HTML เป็นไวยากรณ์ Chomsky Type 2 (ไวยากรณ์ฟรีบริบท) และ RegEx เป็นไวยากรณ์ Chomsky Type 3 (นิพจน์ทั่วไป)
หรือ:
นิพจน์ทั่วไปจับคู่ได้เฉพาะภาษาปกติ แต่ HTML เป็นภาษาที่ไม่มีบริบท
หรือ:
หุ่นยนต์ จำกัด (ซึ่งเป็นโครงสร้างข้อมูลที่อยู่ภายใต้นิพจน์ทั่วไป) ไม่มีหน่วยความจำนอกเหนือจากสถานะที่อยู่ในนั้นและหากคุณมีการซ้อนทับกันโดยพลการคุณต้องมีหุ่นยนต์ขนาดใหญ่ตามอำเภอใจซึ่งชนกับแนวคิดของออโตเมตัน จำกัด
หรือ:
คำศัพท์ Pumping สำหรับภาษาทั่วไปคือสาเหตุที่คุณไม่สามารถทำเช่นนั้นได้
[เพื่อความเป็นธรรม: คำอธิบายข้างต้นส่วนใหญ่เชื่อมโยงไปยังหน้าวิกิพีเดีย แต่สิ่งเหล่านี้ไม่ง่ายต่อการเข้าใจมากกว่าคำตอบ]
ดังนั้นคำถามของฉันคือ: ใครก็ได้โปรดให้คำแปลในแง่ของคำอธิบายที่เป็นทางการของคนธรรมดาที่ให้ไว้ข้างต้นว่าเหตุใดจึงไม่สามารถใช้ regex ในการแยกวิเคราะห์ (X) HTML / XML ได้
แก้ไข:หลังจากอ่านคำตอบแรกแล้วฉันคิดว่าฉันควรจะชี้แจง: ฉันกำลังมองหา "การแปล" ที่อธิบายแนวคิดที่พยายามแปลโดยสังเขป: ในตอนท้ายของคำตอบผู้อ่านควรมีความคิดคร่าวๆ - ตัวอย่างเช่น - "ภาษาปกติ" และ "ไวยากรณ์ที่ไม่มีบริบท" หมายถึงอะไร ...