Memadankan kurungan bersarang dalam rentetan boleh menjadi tugas yang mencabar, terutamanya menggunakan ungkapan biasa (regex). Pertimbangkan kod Python berikut:
<code class="python">import re p = re.compile('\(.+\)') str = '(((1+0)+1)+1)' print(p.findall(str))</code>
Kod ini cuba memadankan semua rentetan seperti ungkapan matematik dalam str pembolehubah menggunakan corak regex tunggal. Walau bagaimanapun, ia hanya sepadan dengan keseluruhan ungkapan secara keseluruhan, walaupun matlamatnya adalah untuk mengenal pasti kurungan bersarang individu.
Corak regex terhad dalam keupayaannya untuk mengendalikan binaan bersarang dengan berkesan. Ungkapan (. ) sepadan dengan mana-mana rentetan yang disertakan dalam kurungan, tetapi ia tidak dapat membezakan antara tahap sarang yang berbeza. Akibatnya, ia mengumpulkan segala-galanya dalam kurungan paling luar dan mengabaikan yang dalam.
Untuk mengatasi batasan regex, kami boleh memanfaatkan perpustakaan yang lebih maju yang dipanggil pyparsing , yang menyediakan penghurai khusus untuk mengendalikan corak rentetan yang kompleks. Berikut ialah contoh menggunakan pyparsing:
<code class="python">import pyparsing thecontent = pyparsing.Word(pyparsing.alphanums) | '+' | '-' parens = pyparsing.nestedExpr('(', ')', content=thecontent)</code>
Kod ini mentakrifkan dua elemen: kandungan, yang mewakili aksara individu atau operator aritmetik, dan kurungan, yang mentakrifkan struktur kurungan bersarang.
Mari kita tunjukkan penyelesaian ini dengan contoh:
<code class="python">res = parens.parseString("((12 + 2) + 3)") print(res.asList())</code>
[[['12', '+', '2'], '+', '3']]
Menggunakan pyparsing untuk pemadanan kurungan bersarang menawarkan beberapa kelebihan over regex:
Walaupun ungkapan biasa boleh berguna untuk pemadanan rentetan yang mudah, mereka bergelut dengan mengendalikan binaan bersarang seperti kurungan. Untuk senario sedemikian, perpustakaan penghuraian khusus seperti pyparsing menyediakan alternatif yang teguh dan fleksibel, memastikan hasil padanan yang tepat dan bermakna.
Atas ialah kandungan terperinci Bolehkah Regex Mengendalikan Kurung Bersarang? Meneroka Had dan Penyelesaian pyparsing.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!