Bolehkah PCRE Memadankan Tatabahasa Sensitif Konteks seperti {a^n b^n c^n}?

DDD
Lepaskan: 2024-10-22 20:55:22
asal
410 orang telah melayarinya

Can PCRE Match Context-Sensitive Grammars like {a^n b^n c^n}?

Memadankan Tatabahasa Sensitif Konteks dengan PCRE: {a^n b^n c^n}

Sementara ungkapan biasa secara historis dikaitkan dengan biasa tatabahasa, pelaksanaan moden seperti PCRE mempamerkan keupayaan lanjutan yang melangkaui rangka kerja teori ini. Salah satu kebolehan tersebut ialah ungkapan tatabahasa sensitif konteks.

Dalam hal ini, persoalan timbul: bolehkah PCRE menghuraikan {a^n b^n c^n}, tatabahasa yang tidak dapat dihuraikan dengan ungkapan biasa? Jawapannya, seperti yang ditunjukkan oleh beberapa pengguna, adalah "ya" yang mengagumkan.

Satu penyelesaian yang sangat menarik yang dikemukakan oleh pengguna melibatkan penggunaan pernyataan yang memandang ke hadapan yang positif:

~^
    (?=(a(?-1)?b)c)
     a+(b(?-1)?c)
$~x
Salin selepas log masuk

Penjelasan:

Tanpa penegasan memandang ke hadapan, regex menyemak nombor sewenang-wenangnya sebagai, diikuti dengan bilangan bs dan cs yang sama. Walau bagaimanapun, ini tidak memastikan bahawa bilangan sebagai sama dengan bilangan bs, seperti yang dikehendaki oleh tatabahasa.

Pernyataan pandangan ke hadapan, khususnya (?=(a(?-1)?b)c), menangani masalah ini. Ia sepadan dengan jujukan sebagai, diikuti dengan bs, setiap kali memastikan bilangan sebagai sepadan dengan bilangan bs. Kemasukan c memastikan bahawa padanan menggunakan semua bs.

Kesimpulan:

Contoh ini mempamerkan kuasa luar biasa pelaksanaan regex moden. Keupayaan PCRE untuk menghuraikan tatabahasa bukan konteks bebas menyerlahkan kepelbagaian dan kapasitinya untuk menyatakan corak yang kompleks. Ini mencabar kepercayaan yang telah lama dipegang bahawa regex hanya mampu menangkap bahasa biasa.

Atas ialah kandungan terperinci Bolehkah PCRE Memadankan Tatabahasa Sensitif Konteks seperti {a^n b^n c^n}?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!