Go Regex: Tidak Termasuk Rentetan Khusus
Dalam Go, anda mungkin menghadapi cabaran apabila cuba memadankan apa-apa kecuali rentetan tetap tertentu menggunakan pakej regexp . Walaupun banyak penyelesaian yang dicadangkan yang melibatkan pandangan ke hadapan tidak boleh digunakan kerana sintaks Go regexp yang terhad, pendekatan alternatif tersedia.
Penyelesaian 1: Gunakan Penjana Corak Nafi
Sejak Go regexp tidak menyokong pandangan, pertimbangkan untuk menggunakan perkhidmatan luaran seperti http://www.formauri.es/personal/pgimeno/misc/non-match-regex untuk menjana corak dinafikan. Sebagai contoh, corak dinafikan untuk "somestring" ialah:
$ ^([^s]|s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*([^os]|o([^ms]|m([^es]|e([^s]|s(omes)*([^ost]|t([^rs]|r([^is]|i([^ns]|n[^gs])))|o([^ms]|m([^es]|e[^s]))))))))*(s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*(o((me?)?|mes(omes)*(t(r?|rin?)|o(me?)?)?))?)?$
Untuk menggunakan corak dinafikan ini dalam regex asal anda, gantikan (.*) terakhir dengan
/[^/]*/[^/]*/(([^s]|s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*([^os]|o([^ms]|m([^es]|e([^s]|s(omes)*([^ost]|t([^rs]|r([^is]|i([^ns]|n[^gs])))|o([^ms]|m([^es]|e[^s]))))))))*(s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*(o((me?)?|mes(omes)*(t(r?|rin?)|o(me?)?)?))?)?)$
Sebagai alternatif, anda boleh menggunakan corak [^/] untuk memadankan sifar atau lebih aksara selain daripada / bukannya .*.
Penyelesaian 2: Tangkap Semua Bahagian dan Semak Nilai
Walaupun anda tidak boleh menggunakan pandangan ke hadapan, anda boleh menangkap ketiga-tiga bahagian corak anda dan menyemak nilai kumpulan tangkapan pertama untuk menentukan sama ada hendak menggunakan nilai yang ditangkap atau melaporkan tiada padanan:
package main import ( "fmt" "regexp" ) func main() { s := "anything/anything/somestring" r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`) val := r.FindStringSubmatch(s) if len(val) > 1 && val[1] != "somestring" { fmt.Println(val[1]) } else { fmt.Println("No match") } }
Atas ialah kandungan terperinci Bagaimana untuk Mengecualikan Rentetan Tertentu Apabila Menggunakan Go Regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!