我有一个这样的字符串(4个单词用点分隔)
Exactfoobar.foobar-_nocaps.foobar-_nocaps.foobar-_caps
我需要编写一个正则表达式来查找上述模式。
- 可以有 4 个或更多字段,用点分隔
- 第一个单词应该是
Exactfoobar.
- 第二个和第三个单词不能有大写但可以有-_
- 第 4 个单词等等可以用 -_ 大写
我正在考虑使用群组,但它在这里不起作用:
^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+ 个字母、数字或_
或-
$
- 字符串结尾。
关于字符串模式后字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798776/