gpt4 book ai didi

regex - 前面的token是不可量化的

转载 作者:行者123 更新时间:2023-12-01 19:38:38 26 4
gpt4 key购买 nike

我有一个像这样的用户名正则表达式:

/^(?=.{5,32}$)(?![1-9_])(?!.*_{2})\w+(?<!_)$/gm

关于正则表达式:
  • 第一个字符是一个字母。
  • 不能连续使用 2 个下划线。
  • 结尾不能有下划线。
  • 人物[a-zA-Z0-9_] (\w) 是允许的。
  • 5 到 32 个字符

  • 由于前瞻和后视,我无法在 Go 中使用它。

    The preceding token is not quantifiable



    问题:

    如何在 Go Regexp 中模拟这些前瞻和后视以使其工作?

    最佳答案

    首先,您似乎可以重构在 JavaScript 中使用的模式:/^(?=.{5,32}$)[^\W0-9_][^\W_]*(?:_[^\W_]+)*$/ ,见 regex demo .

    现在,很容易将它转换为 Go,通过两个单独的检查:1)可以在没有正则表达式的情况下检查搅拌长度,2)可以使用消耗 JS 正则表达式部分完成整体模式检查:

    package main

    import (
    "fmt"
    "regexp"
    "unicode/utf8"
    )

    func main() {
    s := "abc_123def"
    whole_cond := regexp.MustCompile(`^[^\W0-9_][^\W_]*(?:_[^\W_]+)*$`)
    pass_len := utf8.RuneCountInString(s)
    fmt.Println(whole_cond.MatchString(s) && pass_len >= 5 && pass_len <= 32)
    }

    Go demo .

    正则表达式详情
  • ^ - 字符串开头
  • [^\W0-9_] - 除了 ASCII 数字和 _ 之外的任何字符字符
  • [^\W_]* - 0+ 字字符但 _
  • (?:_[^\W_]+)* - 零次或多次出现
  • _ - _字符
  • [^\W_]+ - 除 _ 外的 1+ 个字字符
  • $ - 字符串结尾
  • 关于regex - 前面的token是不可量化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61485599/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com