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

标签 regex go regex-group regex-greedy

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

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

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

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

相关文章:

去模板函数

regex - Perl:如何以结构化方式获取多个正则表达式捕获?

javascript - 正则表达式以嵌套可排序形式更新表单输入多个索引

sql - 在 Go 数据库/sql 包中查看带参数的查询

Javascript、正则表达式和 {n,m}

forms - 在 Go 中解析简单的复选框组

python - 将一个字典中的值与另一个字典中的键链接起来,并使用正则表达式在字符串中将一个替换为另一个

正则表达式递归捕获的字符串

javascript - 如何让rex对[]进行替换或拆分?

regex - 如何更改反向引用的大小写?