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

时间:2019-06-27 21:41:39

标签: regex go regex-group regex-greedy

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

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

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

  1. 可能有4个或更多由点分隔的字段
  2. 第一个单词应该完全是Exactfoobar.
  3. 第二个和第三个单词不能有大写字母,但可以有-_
  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

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用

^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+个字母,数字或_-
  • $-字符串的结尾。

答案 1 :(得分:0)

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

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

相关问题