Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengecualikan Rentetan Tertentu Apabila Menggunakan Go Regex?

Bagaimana untuk Mengecualikan Rentetan Tertentu Apabila Menggunakan Go Regex?

Patricia Arquette
Lepaskan: 2024-12-17 08:57:24
asal
167 orang telah melayarinya

How to Exclude Specific Strings When Using Go Regex?

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?)?)?))?)?$
Salin selepas log masuk

Untuk menggunakan corak dinafikan ini dalam regex asal anda, gantikan (.*) terakhir dengan , menghasilkan corak yang kelihatan seperti:

/[^/]*/[^/]*/(([^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?)?)?))?)?)$
Salin selepas log masuk

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")
    }
}
Salin selepas log masuk

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!

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