Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengatasi Lookarounds dalam Go Regex?

Bagaimana untuk Mengatasi Lookarounds dalam Go Regex?

Barbara Streisand
Barbara Streisandasal
2024-11-30 16:45:11201semak imbas

How to Work Around Lookarounds in Go Regex?

Ralat Menghuraikan Regexp: Sintaks Perl Tidak Sah (?!

Apabila cuba menggunakan ungkapan biasa dalam Go, ralat ditemui:

error parsing regexp: invalid or unsupported Perl syntax: (?!

Ralat ini berlaku secara khusus dengan perkara berikut regex:

regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")

Penyelesaian

Isu ini timbul kerana Go regex tidak menyokong lookarounds, tidak seperti Perl Lookarounds ialah penegasan yang menyemak teks sekeliling tanpa menggunakannya.

Untuk mengatasi pengehadan ini, gunakan pendekatan yang berbeza:

Pertama sekali, susun dua biasa berasingan ungkapan:

first := regexp.MustCompile(`^On\s(.+?)wrote:$`)
second := regexp.MustCompile(`^On.*On\s.+?wrote:`)
Kemudian, laksanakan langkah berikut:

    Semak jika pertama kali sepadan dengan rentetan.
  1. Jika ya, teruskan ke langkah 3. Jika tidak , rentetan tidak sepadan dengan kedua-dua ungkapan, jadi kembalikan benar.
  2. Semak sama ada kedua sepadan dengan rentetan.
  3. Jika ya, rentetan itu sepadan dengan ungkapan kedua, jadi kembalikan palsu Jika tidak, kembalikan benar.
Sebagai alternatif, anda boleh menggunakan kumpulan penangkapan pilihan untuk memudahkan proses. :

regex := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
Semak padanan dan kembalikan benar jika:

    Kumpulan 1 berakhir dengan Hidup.
  • Kumpulan 1 tidak wujud atau tidak berakhir dengan Hidup.
Jika tidak, kembalikan palsu.

Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Lookarounds dalam Go Regex?. 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