当我在golang中尝试这个正则表达式时
我得到了正则表达式解析错误:
error parsing regexp: invalid or unsupported Perl syntax: `(?!`
错误解析正则表达式:无效或不支持的Perl语法:(?!
Go正则表达式不支持lookaround。
方案一:
regexp.MustCompile(^ On \\s(。+?)写道:$)
和
regexp.MustCompile(^ On。* On\ \s。+?写:)
并检查第一个匹配字符串和第二个不会。
您还可以添加一个可选的捕获组(。* On)?
On true 。如果是,返回,否则。
方案二:
go get github.com/dlclark/regexp2
代码如下(示例):
func matchStr(str string) string { expr := `^(?![0-9a-zA-Z]+$)(?![a-zA-Z!@#$%^&*]+$)(?![0-9!@#$%^&*]+$)[0-9A-Za-z!@#$%^&*]{8,16}$` reg, _ := regexp2.Compile(expr, 0) m, _ := reg.FindStringMatch(str) if m != nil { res:= m.String() return res } return "密码包含至少一位数字,字母和特殊字符,且长度8-16"}
“^(?![0-9a-zA-Z]+$)(?![a-zA-Z!@#$%^&*]+$)(?![0-9!@#$%^&*]+$)[0-9A-Za-z!@#$%^&*]{8,16}$”中:
(?![0-9a-zA-Z]+$) 表示匹配后面非数字,非字母的字符
(?![a-zA-Z!@#$%^&*]+$) 表示匹配后面非字母,非特殊字符的字符
(?![0-9!@#$%^&*]+$) 表示匹配后面非数字,非特殊字符的字符
[0-9A-Za-z!@#$%^&*]{8,16} 表示长度8-16,可以是任意的数字,字母和其中包含的特殊字符
发表评论 取消回复