Rumah > pembangunan bahagian belakang > C++ > Bolehkah Ungkapan Biasa Mengenal pasti dengan betul Semi-Kolon Ditamatkan C Untuk dan Sementara Gelung?

Bolehkah Ungkapan Biasa Mengenal pasti dengan betul Semi-Kolon Ditamatkan C Untuk dan Sementara Gelung?

Barbara Streisand
Lepaskan: 2024-12-15 04:33:13
asal
601 orang telah melayarinya

Can a Regular Expression Reliably Identify Properly Semi-Colon Terminated C   For and While Loops?

Ungkapan Biasa untuk Gelung Semi-Kolon Ditamatkan C For & While

Cabaran: Mencipta ungkapan biasa yang membezakan antara:

  • C ditamatkan dengan betul untuk atau gelung sementara dengan koma bertitik (;)
  • Gelung yang tidak mempunyai penamatan koma bertindih

Percubaan Awal:

Ungkapan biasa awal yang disediakan berkesan mengesan kurungan seimbang dalam kenyataan untuk/semasa. Walau bagaimanapun, ia bergelut apabila ungkapan gelung mengandungi panggilan fungsi.

^\s*(for|while)\s*
\(  # match the initial opening parenthesis
    (?P<balanced>
        [^()]
        |
        \( (?P=balanced)* \)
    )*  # Look for a sequence of balanced substrings
\)  # Finally, the outer closing parenthesis.
\s*;\s*
Salin selepas log masuk

Pendekatan Disemak:

Leraian yang dicadangkan menyimpang daripada pendekatan berasaskan regex. Sebaliknya, ia menggunakan rutin yang ringkas:

  1. Mulakan pos pada aksara sebelum kurungan pembukaan pernyataan for/while.
  2. Tubuhkan pembilang openBr dengan nilai permulaan 0.
  3. Lelaran melalui rentetan, menambah pos dan menambah/mengurangkan openBr berdasarkan kurungan yang ditemui.
  4. Tamatkan lelaran apabila openBr kembali kepada 0.
  5. Sahkan jika koma bernoktah wujud serta-merta selepas kurungan penutup ditemui dalam langkah 4.

Kelebihan:

  • Kesederhanaan dan kejelasan
  • Tiada pergantungan pada ungkapan biasa yang kompleks
  • Keupayaan untuk mengendalikan gelung dengan ungkapan yang mengandungi panggilan fungsi

Atas ialah kandungan terperinci Bolehkah Ungkapan Biasa Mengenal pasti dengan betul Semi-Kolon Ditamatkan C Untuk dan Sementara Gelung?. 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