Bolehkah PCRE Memadankan Tatabahasa Sensitif Konteks Seperti {a^n b^n c^n;?

Susan Sarandon
Lepaskan: 2024-10-23 01:06:03
asal
995 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 (cth., "aaabbbccc")

Sementara biasa ungkapan secara tradisinya dikaitkan dengan menghuraikan tatabahasa biasa, pelaksanaan moden seperti PCRE menawarkan keupayaan lanjutan. Ini menimbulkan persoalan: bolehkah kita menggunakan PCRE untuk menghuraikan tatabahasa yang lebih kompleks dan peka konteks?

Secara khusus, mari kita terokai cabaran memadankan rentetan mengikut tatabahasa sensitif konteks {a^n b^n c^n; n > 0} (cth., "aaabbbccc").

Penyelesaian Regex:

Diinspirasikan oleh percubaan awal NullUserException, kami telah mencipta regex berikut:

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

Penjelasan:

  • Bahagian luar ~^...$~ memastikan rentetan bermula dan berakhir dengan corak yang diingini.
  • Di dalam kurungan , ~?(a(?-1)?b)c~ ialah pernyataan berpandangan positif yang menyemak bilangan yang sama bagi sebagai dan bs.
  • ~a ~ sepadan dengan sebarang nombor sebagai.
  • ~b(?-1)?c~ sepadan dengan bilangan bs yang sama diikuti dengan cs.
  • (?-) dalam (?-1) membolehkan kita memadankan jujukan arbitrari sebagai dan bs yang memenuhi dakwaan memandang ke hadapan.

Kes Ujian:

Kami menguji regex terhadap pelbagai input, termasuk:

  • "abbcc " - Berjaya padan
  • "aaabbbccc" - Berjaya padan
  • "aaabbbcc" - Gagal padan (betul)
  • "aaaccc" - Gagal sepadan (betul)
  • "aabcc" - Gagal sepadan (betul)
  • "abbcc" - Gagal sepadan (betul)

Kesimpulan:

regeks ini menunjukkan kuasa luar biasa ungkapan biasa moden, melangkaui tatabahasa biasa untuk memadankan walaupun tatabahasa sensitif konteks seperti {a^n b^n c^n}. Keupayaan untuk menghuraikan corak yang lebih kompleks ini membuka kemungkinan baharu untuk aplikasi regex.

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
Artikel terbaru oleh pengarang
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!