Go语言 Regex模式,确保至少存在一个字符沿着其他条件

pkln4tw6  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(100)

我尝试根据以下三个条件验证字符串
1.它必须包含字符串
1.除了.-之外,不应包含任何特殊字符。
1.数字是允许的,但不是必需的
我在hit和trial的帮助下形成了这个正则表达式^(?=.*[a-zA-Z])[a-zA-Z0-9\.\- ]*$。它可以在所有可用于测试的在线工具中工作。但是我不能在代码中使用它

package main

import (
    "fmt"
    "regexp"
)

func main() {
    rule := regexp.MustCompile(`^(?=.*[a-zA-Z])[a-zA-Z0-9\.\- ]*$`).MatchString
    fmt.Println(rule("test_string"))
}

字符串
错误说

panic: regexp: Compile(`^(?=.*[a-zA-Z])[a-zA-Z0-9\.\- ]*$`): error parsing regexp: invalid or unsupported Perl syntax: `(?=`


即使它在其他在线工具中也有效。我该怎么解决这个问题?

6yjfywim

6yjfywim1#

go不支持lookaroundAssert,但是你可以通过匹配允许的字符来省略lookaround。
您可以在可选匹配任何允许的字符之间匹配单个字符A-Za-z。

^[0-9. -]*[a-zA-Z][a-zA-Z0-9. -]*$

字符串

说明

  • ^字符串开头
  • [0-9. -]*可选匹配任何允许的字符,不带a-zA-Z
  • [a-zA-Z]匹配单个字符a-zA-Z
  • [a-zA-Z0-9. -]*可选匹配所有允许的字符
  • $字符串结束

Regex demo

package main

import (
    "fmt"
    "regexp"
)

func main() {
    rule := regexp.MustCompile(`^[0-9. -]*[a-zA-Z][a-zA-Z0-9. -]*$`).MatchString
    fmt.Println(rule("test_string"))
    fmt.Println(rule("this is a test"))
}


输出量

false
true

相关问题