Soalan asal mencari ungkapan biasa untuk mengenal pasti gelung C untuk atau sementara ditamatkan dengan koma bertitik. Penyelesaian yang dicadangkan menggunakan kumpulan penangkapan bernama, tetapi menghadapi cabaran apabila panggilan fungsi disertakan dalam ungkapan ketiga gelung.
Untuk menyelesaikan isu ini, pendekatan alternatif telah dibangunkan:
# match any line that begins with a "for" or "while" statement: REGEX_STR = r"^\s*(for|while)\s*\(" # match a balanced substring, accounting for function calls within expressions: SUB_STR_PATTERN = r"([^\(\)]|(\([^\(\)]*(?:\|\|[^()\s]*(?1))*?\)))" # match a balanced string of arbitrary length, including function calls: SUB_STR_GROUP = f"(?P<balanced>{SUB_STR_PATTERN})+" # match the initial opening parenthesis, followed by balanced expressions, and finally the closing parenthesis. REGEX_STR += f"{SUB_STR_GROUP}\)\s*;\s*" # compile the regex object with MULTILINE and VERBOSE flags for readability REGEX_OBJ = re.compile(REGEX_STR, re.MULTILINE | re.VERBOSE)
Ungkapan biasa yang dipertingkatkan ini memanfaatkan SUB_STR_PATTERN untuk menentukan subrentetan seimbang yang boleh mengandungi panggilan fungsi. || operator digunakan untuk mencipta keadaan OR logik, membenarkan corak padan sama ada aksara bukan kurungan atau rentetan seimbang bersarang.
Dengan mengulangi corak ini dalam SUB_STR_GROUP, regex memastikan ia boleh memadankan jujukan seimbang ungkapan, tanpa mengira tahap sarangnya.
Ini dipertingkatkan secara tetap ungkapan menyediakan penyelesaian yang lebih mantap untuk mengesan C untuk atau sementara gelung ditamatkan dengan koma bertitik, walaupun dalam kes di mana panggilan fungsi hadir dalam ungkapan ketiga gelung. Ia memudahkan logik dengan menghapuskan keperluan untuk corak rekursif.
Atas ialah kandungan terperinci Bagaimana Kita Boleh Meningkatkan Ungkapan Biasa untuk Mengesan C Untuk dan Sementara Gelung Berakhir dengan Koma bertitik dengan Boleh Dipercayai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!