Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengecualikan Rentetan Tertentu Apabila Memadankan dalam Ungkapan Biasa Go?

Bagaimana untuk Mengecualikan Rentetan Tertentu Apabila Memadankan dalam Ungkapan Biasa Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-20 07:58:12899semak imbas

How to Exclude a Specific String When Matching in Go Regular Expressions?

Memadankan Segala-galanya Kecuali Rentetan Malar dalam Ungkapan Biasa Go

Dalam Go, menggunakan enjin ekspresi biasa RE2, tidak ada cara langsung untuk menggunakan pernyataan pandang ke hadapan untuk memadankan semua aksara kecuali rentetan tertentu. Walau bagaimanapun, terdapat pendekatan alternatif untuk mencapai fungsi ini:

Perkhidmatan Web untuk Menjana Corak Nafi

  1. Gunakan perkhidmatan dalam talian [Non-match REGEX](http ://www.formauri.es/personal/pgimeno/misc/non-match-regex) untuk menjana corak dinafikan untuk rentetan yang anda inginkan untuk mengecualikan ("somestring" dalam kes ini).
  2. Dalam ungkapan biasa anda, gantikan (.*) yang terakhir dengan corak dinafikan yang dijana (pastikan tiada garis miring ke belakang dalam corak dinafikan yang disalin).

Contohnya, jika corak dinafikan yang dijana 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?)?)?))?)?$

regex terakhir anda akan 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?)?)?))?)?)$

Menangkap Semua Bahagian

Sebagai alternatif, anda boleh menangkap ketiga-tiga bahagian rentetan input (dipisahkan dengan garis miring ke hadapan) ke dalam kepingan. Kemudian, semak sama ada bahagian ketiga (val[1]) sama dengan rentetan yang anda mahu kecualikan ("somestring" dalam kes ini). Jika ia tidak sepadan, gunakan val[1] sebagai hasil yang dijangkakan:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := "anything/anything/somestring"
    r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)
    val := r.FindStringSubmatch(s)
    // fmt.Println(val[1]) // -> somestring
    if len(val) > 1 && val[1] != "somestring" { // val has more than 1 element and is not equal to somestring?
        fmt.Println(val[1])      // Use val[1]
    } else {
        fmt.Println("No match")  // Else, report no match
    }
}

Atas ialah kandungan terperinci Bagaimana untuk Mengecualikan Rentetan Tertentu Apabila Memadankan dalam Ungkapan Biasa Go?. 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