Go 正規表示式:排除特定字串
在Go 中,當嘗試使用regexp 套件來匹配除某些常數字串外的任何內容時,您可能會遇到挑戰。雖然由於 Go regexp 的語法有限,許多涉及前瞻的建議解決方案不適用,但可以使用替代方法。
解決方法1:使用否定模式產生器
Since Go regexp不支援前瞻,請考慮使用外部服務,例如http://www.formauri.es /personal/pgimeno/misc/non-match-regex 產生否定模式。例如,「somestring」的否定模式為:
$ ^([^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?)?)?))?)?)$
或者,您可以使用[^/] 模式來匹配除 /以外的零個或多個字符,而不是.*.
解決方法2:捕獲所有部分並檢查值
雖然您無法使用前瞻,但您可以捕獲模式的所有三個部分並檢查第一個捕獲組來確定是否使用捕獲的值或報告不匹配:
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") } }
以上是使用 Go Regex 時如何排除特定字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!