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(`^[^/]+/[^/]+/(.*)`)
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]) }
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!