首页 > 后端开发 > Golang > 使用 Go Regex 时如何排除特定字符串?

使用 Go Regex 时如何排除特定字符串?

Patricia Arquette
发布: 2024-12-17 08:57:24
原创
126 人浏览过

How to Exclude Specific Strings When Using Go Regex?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板