【问题标题】:Regex for string after string pattern字符串模式后字符串的正则表达式
【发布时间】:2019-11-09 22:22:45
【问题描述】:

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

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

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

  1. 可能有 4 个或更多字段,用点分隔
  2. 第一个单词应该是Exactfoobar.
  3. 第 2 和第 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)?这样你就不需要正则表达式了,它应该更快、更易读。

标签: regex go regex-group regex-greedy


【解决方案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+ 个字母、数字或 _-
  • $ - 字符串结束。

【讨论】:

【解决方案2】:
^Exactfoobar(?:\.[a-z0-9_\-]+){2}(?:\.[A-Za-z0-9_\-]+)+$

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

【讨论】:

  • 这是一个错误的解决方案,请参阅your regex demo。单词必须以字母或数字开头。
  • 我猜你是对的,虽然这不是一个明确的要求
猜你喜欢
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
相关资源
最近更新 更多