Rumah > pembangunan bahagian belakang > C++ > Bolehkah Ungkapan Biasa Memadankan Tanda Kurung Seimbang dengan Amanah?

Bolehkah Ungkapan Biasa Memadankan Tanda Kurung Seimbang dengan Amanah?

Barbara Streisand
Lepaskan: 2025-01-16 15:02:39
asal
783 orang telah melayarinya

Can Regular Expressions Reliably Match Balanced Parentheses?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan