Menguasai Padanan Kurungan Seimbang dengan Ungkapan Biasa
Penghuraian tepat rentetan kompleks selalunya bergantung pada mengenal pasti kurungan seimbang dengan betul. Regular Expressions (RegEx), dengan keupayaan lanjutan mereka, menawarkan penyelesaian yang berkuasa untuk cabaran ini.
Pertimbangkan rentetan "test -> funcPow((3),2) (9 1)". Matlamatnya adalah untuk mengekstrak subrentetan bermula daripada "funcPow" dan melanjutkan ke kurungan penutup kedua, tidak termasuk yang terakhir. RegEx mudah seperti "func(a-zA-Z_)(.*)" gagal, mengembalikan keseluruhan ungkapan dan bukannya "funcPow((3),2)" yang dikehendaki.
Kunci untuk menyelesaikan masalah ini terletak pada penggunaan ciri RegEx untuk padanan kurungan yang seimbang. Inilah penyelesaiannya:
<code>func([a-zA-Z_][a-zA-Z0-9_]*) # Function name \( # Opening parenthesis (?: [^()] # Match any character except parentheses | (?<open> \( ) # Match opening parenthesis, capture into 'open' group | (?<-open> \) ) # Match closing parenthesis, delete 'open' group capture )+ (?(open)(?!)) # Fails if 'open' group is not empty (unbalanced) \) # Closing parenthesis</code>
RegEx ini bijak menggunakan kumpulan tangkapan bernama dan ungkapan bersyarat. (?<open> ( )
menangkap kurungan pembukaan, manakala (?<-open> ) )
sepadan dengan kurungan penutup dan pada masa yang sama mengalih keluar kurungan pembukaan yang ditangkap sebelum ini. (?(open)(?!))
bersyarat memastikan semua kurungan pembukaan telah dipadankan dengan kurungan penutup; jika tidak, perlawanan gagal, menunjukkan tanda kurungan tidak seimbang.
Teknik RegEx lanjutan ini menyediakan kaedah yang mantap dan tepat untuk mengekstrak subrentetan yang mengandungi kurungan seimbang daripada rentetan input yang kompleks, membolehkan penghuraian yang cekap dan boleh dipercayai.
Atas ialah kandungan terperinci Bagaimanakah Ungkapan Biasa Boleh Menyelesaikan Padanan Kurung Seimbang dalam Rentetan Kompleks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!