字符串模式后字符串的正则表达式

Regex for string after string pattern

我有一个这样的字符串(4个单词用点分隔)

Exactfoobar.foobar-_nocaps.foobar-_nocaps.foobar-_caps

我需要编写一个正则表达式来查找上述模式。

  1. 可以有 4 个或更多字段,用点分隔
  2. 第一个词应该正好是 Exactfoobar.
  3. 第2个和第3个单词不能有大写但可以有-_
  4. 第 4 个单词等等可以用 -_
  5. 大写

我正在考虑使用群组,但它在这里不起作用:

^Exactfoobar\.([a-z0-9][a-z0-9_\-.])+([a-z0-9][a-zA-Z0-9_\-.])+$

我应该如何考虑匹配一个字符串接一个字符串。可能吗?

在 golang 中尝试这个,但似乎无法正确使用上述正则表达式

package main

import (
    "fmt"
    "regexp"
)

func main() {

    var validID = regexp.MustCompile(`^ Exactfoobar\.([a-z0-9][a-z0-9_\-.])+([a-z0-9][a-z0-9_\-.])+$`)

    fmt.Println(validID.MatchString("Exactfoobar.somestring.some_other-string.someStringwithCaps"))


}

结果:

false

谢谢

您可以使用

^Exactfoobar(?:\.[a-z0-9][a-z0-9_-]*){2}(?:\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+$

regex demo

  • ^ - 字符串开始
  • Exactfoobar - 一些词
  • (?:\.[a-z0-9][a-z0-9_-]*){2} - 重复两次 .,然后是小写字母或数字,然后是 0+ 个小写字母或数字,_-
  • (?:\.[a-zA-Z0-9][a-zA-Z0-9_-]*)+ - 重复 1 次或多次
    • \. - 点
    • [a-zA-Z0-9] - 字母或数字
    • [a-zA-Z0-9_-]* - 0+ 个字母、数字或 _-
  • $ - 字符串结尾。
^Exactfoobar(?:\.[a-z0-9_\-]+){2}(?:\.[A-Za-z0-9_\-]+)+$

https://regex101.com/r/PJ9V0L/1