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
Patricia Arquetteasal
2024-12-17 08:57:24168semak imbas

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?)?)?))?)?$

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?)?)?))?)?)$

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!

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