Ungkapan Biasa dan Tanda Kurung Seimbang: Padanan yang Mencabar
Ekspresi biasa ialah alat yang berkuasa, tetapi padanan kurungan yang seimbang dengan sempurna memberikan halangan yang ketara. Walaupun regex asas boleh mengendalikan kes mudah, struktur bersarang yang kompleks memerlukan teknik yang lebih canggih. Mari terokai cabaran ini dan penyelesaian menggunakan ciri regex lanjutan.
Pertimbangkan percubaan awal ini:
<code>func([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)</code>
regeks ini bertujuan untuk memadankan panggilan fungsi, tetapi ia gagal untuk mengenal pasti hanya kurungan seimbang dengan tepat. Ia menangkap semua kurungan yang ditemui, tanpa mengira sarang yang betul.
Untuk mengatasi pengehadan ini, kita perlu memanfaatkan ciri seperti kumpulan yang tidak menangkap, dakwaan pandang ke hadapan dan pandangan sekeliling. Ini membenarkan padanan bersyarat dan pengesahan corak berdasarkan konteks.
Penyelesaian regex yang diperhalusi:
<code>func([a-zA-Z_][a-zA-Z0-9_]*) # Function name \( # Opening parenthesis (?: # Non-capturing group [^()] # Match any character except parentheses | (?<open> \( ) # Match opening parenthesis, add to 'open' stack | (?<-open> \) ) # Match closing parenthesis, remove from 'open' stack )+ (?(open)(?!)) # Fails if 'open' stack is not empty \) # Closing parenthesis</code>
Ungkapan yang dipertingkat ini menggunakan mekanisme kumpulan pengimbangan. Binaan (?<open> ( )
dan (?<-open> ) )
mengurus tindanan. Setiap kurungan pembukaan menambah pada timbunan, dan setiap kurungan penutup mengeluarkan satu. Penegasan (?(open)(?!))
terakhir memastikan perlawanan gagal jika timbunan tidak kosong pada penghujungnya, menjamin kurungan yang seimbang. Pendekatan ini mengendalikan struktur bersarang dengan berkesan.
Oleh itu, dengan menggunakan keupayaan regex lanjutan secara strategik, kami boleh membina ungkapan yang mampu mengenal pasti dan memadankan struktur kurungan seimbang dengan tepat.
Atas ialah kandungan terperinci Bolehkah Ungkapan Biasa Memadankan Tanda Kurung Seimbang dengan Amanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!