Tidak ada hari di SO yang berlalu tanpa pertanyaan tentang parsing (X) HTML atau XML dengan ekspresi reguler yang diminta.
Meskipun relatif mudah untuk menghasilkan contoh yang menunjukkan regex yang tidak dapat berfungsi untuk tugas ini atau dengan kumpulan ekspresi untuk mewakili konsep, saya masih tidak dapat menemukan penjelasan formal tentang mengapa hal ini tidak mungkin dilakukan di awam. istilah.
Satu-satunya penjelasan formal yang sejauh ini dapat saya temukan di situs ini mungkin sangat akurat, tetapi juga cukup samar bagi programmer otodidak:
kekurangannya di sini adalah bahwa HTML adalah tata bahasa Chomsky Tipe 2 (tata bahasa bebas konteks) dan RegEx adalah tata bahasa Chomsky Tipe 3 (ekspresi reguler)
atau:
Ekspresi reguler hanya dapat mencocokkan bahasa biasa tetapi HTML adalah bahasa tanpa konteks.
atau:
Sebuah robot terbatas (yang merupakan struktur data yang mendasari ekspresi reguler) tidak memiliki memori selain dari keadaannya, dan jika Anda memiliki sarang yang dalam secara sewenang-wenang, Anda memerlukan robot besar yang sewenang-wenang, yang bertabrakan dengan gagasan tentang robot terbatas.
atau:
Lemma Pumping untuk bahasa biasa adalah alasan mengapa Anda tidak bisa melakukan itu.
[Agar adil: mayoritas dari penjelasan di atas tertaut ke halaman wikipedia, tetapi ini tidak lebih mudah untuk dimengerti daripada jawabannya sendiri].
Jadi pertanyaan saya adalah: dapatkah seseorang memberikan terjemahan dalam istilah awam dari penjelasan formal yang diberikan di atas tentang mengapa tidak mungkin menggunakan regex untuk parsing (X) HTML / XML?
EDIT: Setelah membaca jawaban pertama, saya pikir saya harus menjelaskan: Saya mencari "terjemahan" yang juga menjelaskan secara singkat konsep yang coba diterjemahkan: di akhir jawaban, pembaca harus memiliki gambaran kasar - misalnya - tentang apa arti "bahasa biasa" dan "tata bahasa bebas konteks" ...