Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Ungkapan Biasa Boleh Memadankan Tanda Kurung Seimbang Dengan Tepat Dalam Panggilan Fungsi Tertentu?
Ungkapan Biasa untuk Padanan Kurungan Seimbang Tepat
Artikel ini menangani cabaran memadankan kurungan seimbang dengan tepat menggunakan ungkapan biasa, khususnya dalam konteks panggilan fungsi (cth., funcPow
). Pendekatan regex standard selalunya gagal untuk mengehadkan pemadanan dengan skop panggilan fungsi yang diingini.
Penyelesaian terletak pada teknik regex yang lebih maju. Ungkapan berikut menggunakan kumpulan tangkapan bernama dan binaan kumpulan mengimbangi untuk mencapai padanan yang tepat:
<code>var r = new Regex(@" func([a-zA-Z_][a-zA-Z0-9_]*) # Function name \( # Opening parenthesis (?: [^()] # Match any character except parentheses | (?<open> \( ) # Match opening parenthesis, add to 'open' stack | (?<-open> \) ) # Match closing parenthesis, remove from 'open' stack )+ (?(open)(?!)) # Assertion: 'open' stack must be empty \) # Closing parenthesis ", RegexOptions.IgnorePatternWhitespace);</code>
regex ini menggunakan mekanisme kumpulan pengimbangan. (?<open> ( )
menambah kurungan pembukaan pada kumpulan tangkapan bernama "terbuka", bertindak seperti timbunan. (?<-open> ) )
mengalih keluar kurungan daripada tindanan "terbuka" untuk setiap kurungan penutup yang ditemui. (?(open)(?!))
bersyarat memastikan bahawa padanan gagal jika tindanan ("terbuka") tidak kosong pada penghujungnya, menjamin kurungan seimbang dalam panggilan fungsi. Pendekatan ini secara berkesan mengehadkan padanan kepada panggilan fungsi yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimanakah Ungkapan Biasa Boleh Memadankan Tanda Kurung Seimbang Dengan Tepat Dalam Panggilan Fungsi Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!