Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ungkapan biasa dengan ulangan bersarang

Ungkapan biasa dengan ulangan bersarang

王林
王林ke hadapan
2024-02-08 21:20:301164semak imbas

Ungkapan biasa dengan ulangan bersarang

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.

Kandungan soalan

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

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam