首页 > 后端开发 > Golang > Go正则表达式匹配时如何排除特定字符串?

Go正则表达式匹配时如何排除特定字符串?

Mary-Kate Olsen
发布: 2024-12-20 07:58:12
原创
899 人浏览过

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

在 Go 正则表达式中匹配除常量字符串之外的所有内容

在 Go 中,利用正则表达式引擎 RE2,没有直接的方法使用前瞻断言来匹配所有内容除特定字符串之外的字符。但是,还有其他方法可以实现此功能:

生成否定模式的 Web 服务

  1. 使用在线服务 [Non-match REGEX](http ://www.formauri.es/personal/pgimeno/misc/non-match-regex) 为您想要排除的字符串生成否定模式(本例中为“somestring”)。
  2. 在正则表达式中,将最后一个 (.*) 替换为生成的否定模式(确保复制的否定模式中没有反斜杠)。

例如,如果生成的否定模式是:

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

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