首頁 >後端開發 >Golang >如何使用 Go Regexp 來匹配除特定字串之外的所有內容?

如何使用 Go Regexp 來匹配除特定字串之外的所有內容?

Barbara Streisand
Barbara Streisand原創
2024-12-24 14:12:15281瀏覽

How Can I Use Go Regexp to Match Everything Except a Specific String?

我可以使用 Go Regexp 來尋找除某個字串之外的所有內容嗎?

正如許多類似的問題所示,使用 Go 來匹配特定字串正規表示式可能具有挑戰性。此問題詢問如何匹配格式為“anything/anything/somestring”的字串,但排除包含“somestring”的字串。

模式“/././(. )”將匹配“somestring”,但我們希望匹配除它之外的所有內容。大多數建議的解決方案使用“/././((?!somestring).)”,這在 Go 正規表示式中無效,因為它包含不可量化的標記。

Go 的正規表示式模組不支援前瞻來確保線性執行時間 (O(n)) 限制。因此,解決方法是必要的。

否定模式的 Web 服務

一種方法是使用非匹配正規表示式 Web 服務來產生與 POSIX 相容的否定模式。對於“somestring”,產生的模式是:

^(1|s(s|o(s|m(s|es(omes))(s| t(s|r(s|i(s|ns)))|o(s|ms)))))(2|o( 3|m(4|e(1|s(omes)(5|t(6|r(7|i(>|i( 8|n9)))|o(3|m(3|m(4|e1

)))))))

(s(s|o(s|m(s|es(哦mes)

(s|t(s|r(s|i(s|ns)))|o(s|ms)))))(o((me?)?|mes(omes) )*(t(r?|rin?)|o(我?)?)?))?)?$替換最後一個“(.*)”和“”在你原來的正規表示式中的產量:

/10/10/((/((1 |s(s|o(s|m(s|es(omes))(s|t(s|r(s|i(s|ns)))|o(s|ms)))) )(2|o(3|m(4|m(4 |e(1|s(奧姆斯)(5|t(6| r(7|i(8|n9)))|o( 3|m(4

|e

1

))))))))( s(s|o (s|m(s|es(omes)

(s|t(s|r(s|i(s|ns)))|o(s|ms)))))

(o( (我?)?|mes(omes)*(t(r?|rin?)|o(我?)?)?))?)?)$

這個確保正規表示式只捕捉第三個反斜線之後的部分。 捕獲所有三個部分替代解決方案捕獲您感興趣的所有三個部分。檢查後捕獲組 #1 值,您可以決定回傳什麼:
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
    }
}

  1. s
  2. os
  3. ms
  4. ost
  5. rs
  6. rs
  7. ns
  8. gs
  9. /
/

以上是如何使用 Go Regexp 來匹配除特定字串之外的所有內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn