editor php Xiaoxin akan memperkenalkan anda kepada ungkapan biasa dengan ulangan bersarang dalam artikel ini. Ungkapan biasa ialah alat padanan rentetan yang berkuasa yang boleh digunakan untuk mencari, menggantikan dan mengesahkan rentetan. Pengulangan bersarang merujuk kepada menggunakan satu atau lebih corak berulang dalam ungkapan biasa, dan corak berulang ini boleh bersarang dalam corak lain. Teknik ini boleh digunakan untuk memadankan teks dengan struktur hierarki, seperti teg HTML, kurungan bersarang, dsb. Dengan memahami sintaks dan penggunaan ungkapan biasa berulang bersarang, kami boleh mengendalikan pelbagai keperluan padanan rentetan kompleks dengan lebih fleksibel.
Saya cuba mencipta ungkapan biasa dalam go yang sepadan sehingga 50 perkataan yang dipisahkan oleh ruang, dengan setiap perkataan adalah 1-32 "a" Saya menggunakan ungkapan biasa berikut
regexp.compile(`^(a{1,32}\s?){1,50}$`)
Saya mendapat ralat berikut
error parsing regexp: invalid repeat count: `{1,50}`
Saya perasan ia boleh berulang sehingga 31 kali, seperti ini
r, err := regexp.Compile(`^(a{1,32}\s?){1,31}$`)
Lihat https://go.dev/play/p/rlnrox9-57_m
Enjin Go's regexp
mempunyai had di mana gabungan peringkat atas dan sebarang ulangan dalaman tidak boleh melebihi 1000 salinan ulangan paling dalam bahagian . Ini didokumenkan dalam re2 spesifikasi tatabahasa.
Dalam kes anda, sehingga 31 berfungsi kerana dalam 32 * luar 31 = 992. 32 * 32 = 1024 dan 32 * 50 = 1600 tidak akan berfungsi melebihi had tersebut.
Penyelesaian adalah dengan membahagikan ungkapan kepada bahagian: ^(a{1,32}s?){1,31}(a{1,32}s?){0,19}$
p>
Atas ialah kandungan terperinci Ungkapan biasa dengan ulangan bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!