Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Ungkapan Biasa Boleh Memadankan Tanda Kurung Seimbang Dengan Tepat Dalam Panggilan Fungsi Tertentu?

Bagaimanakah Ungkapan Biasa Boleh Memadankan Tanda Kurung Seimbang Dengan Tepat Dalam Panggilan Fungsi Tertentu?

Susan Sarandon
Susan Sarandonasal
2025-01-16 15:17:13547semak imbas

How Can Regular Expressions Accurately Match Balanced Parentheses Within a Specific Function Call?

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!

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