Rumah >pembangunan bahagian belakang >C++ >Bagaimana Kita Boleh Meningkatkan Ungkapan Biasa untuk Mengesan C Untuk dan Sementara Gelung Berakhir dengan Koma bertitik dengan Boleh Dipercayai?

Bagaimana Kita Boleh Meningkatkan Ungkapan Biasa untuk Mengesan C Untuk dan Sementara Gelung Berakhir dengan Koma bertitik dengan Boleh Dipercayai?

Barbara Streisand
Barbara Streisandasal
2024-12-15 03:41:13473semak imbas

How Can We Improve Regular Expressions to Reliably Detect C   For and While Loops Ending with Semicolons?

Memperbaiki Ungkapan Biasa untuk Pengesanan Gelung C dengan Titik Bertitik

Pengenalan

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.

Ungkapan Biasa Dipertingkat

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)

Penjelasan

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.

Kesimpulan

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!

Kenyataan:
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