在Go 中,利用正規表示式引擎RE2,沒有直接的方法使用前瞻斷言來匹配所有內容除特定字串之外的字元。但是,還有其他方法可以實現此功能:
產生否定模式的Web 服務
例如,如果產生的否定模式是:
[^([^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?)?)?))?)?$
您的最終正規表示式將如下所示例如:
/[^/]*/[^/]*/(([^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?)?)?))?)?)$
捕捉所有部分
或者,您可以將輸入字串的所有三個部分(用正斜線分隔)捕獲到一個切片中。然後,檢查第三部分 (val[1]) 是否等於您要排除的字串(在本例中為「somestring」)。如果不匹配,則使用 val[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 } }
以上是Go正規表示式符合時如何排除特定字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!