Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Memadankan Apa-apa Kecuali Rentetan Tertentu dalam Ungkapan Biasa Go?

Bagaimanakah Saya Boleh Memadankan Apa-apa Kecuali Rentetan Tertentu dalam Ungkapan Biasa Go?

Linda Hamilton
Lepaskan: 2024-12-17 04:55:24
asal
696 orang telah melayarinya

How Can I Match Anything Except a Specific String in Go Regular Expressions?

Memadankan Apa-apa Kecuali Rentetan Malar dalam Ungkapan Biasa Go

Dalam Go, pemadanan ungkapan biasa dilakukan menggunakan pakej regexp. Walaupun pakej ini menyediakan ciri yang berkuasa, ia mempunyai batasan, salah satunya ialah ketiadaan pandangan ke hadapan. Ini menimbulkan cabaran apabila cuba memadankan semua kecuali corak tertentu, seperti dalam kes mengecualikan rentetan malar.

Pendekatan awal menggunakan corak /.*/.*/(.*) hanya akan sepadan dengan satu sebahagian daripada rentetan yang dikehendaki, menjadikannya tidak sesuai untuk tujuan yang dimaksudkan. Sebaliknya, corak yang lebih inklusif diperlukan.

Memahami Kelas Watak Nafi

Go regex menggunakan kelas aksara dinafikan untuk mengecualikan aksara atau kumpulan aksara tertentu. Contohnya, [^/] sepadan dengan mana-mana aksara kecuali garis miring ke hadapan (/). Oleh itu, menggantikan .* awal dengan [^/]* akan sepadan dengan sifar atau lebih aksara selain daripada /.

Walau bagaimanapun, adalah penting untuk menangkap ketiga-tiga bahagian rentetan untuk menentukan sama ada bahagian pertama (selepas dua garis miring ke hadapan) tidak mengandungi rentetan tertentu. Ini dicapai dengan mengubah suai corak seperti berikut:

r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)
Salin selepas log masuk

Menggunakan Negasi dalam Penilaian Subpadanan

Selepas menangkap ketiga-tiga bahagian, nilai boleh diekstrak sebagai tatasusunan daripada rentetan. Elemen pertama (val[1]) mewakili rentetan yang ditangkap selepas garis miring ke hadapan ketiga. Untuk mengecualikan rentetan tertentu, syarat berikut dinilai:

if len(val) > 1 && val[1] != "somestring" {
    fmt.Println(val[1])
}
Salin selepas log masuk

Jika syarat dipenuhi (lebih daripada satu elemen dalam tatasusunan dan val[1] tidak sama dengan "somestring"), subrentetan yang dikehendaki dicetak. Jika tidak, "Tiada padanan" dipaparkan.

Penyelesaian Alternatif Menggunakan Perkhidmatan Web Regex Bukan Padanan

Memandangkan regexp Go tidak mempunyai pandangan ke hadapan, seseorang boleh menggunakan http://www .formauri.es/personal/pgimeno/misc/non-match-regex Perkhidmatan Web untuk menjana serasi POSIX dinafikan corak. Menggunakan perkhidmatan ini, corak yang dinafikan untuk rentetan tertentu boleh diperolehi.

Kesimpulan

Walaupun keupayaan ekspresi biasa Go adalah terhad dalam aspek tertentu, terdapat penyelesaian yang berkesan untuk mencapai kefungsian padanan yang dikehendaki. Dengan memanfaatkan kelas aksara yang dinafikan dan penilaian subpadanan yang berhati-hati, atau dengan menggunakan penyelesaian alternatif yang disebutkan di atas menggunakan perkhidmatan Web regex bukan padanan, seseorang boleh menyelesaikan tugas memadankan apa sahaja kecuali rentetan tetap menggunakan ungkapan biasa Go.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memadankan Apa-apa Kecuali Rentetan Tertentu dalam Ungkapan Biasa Go?. 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