小编典典

负向后看

go

我有一个弦

centenary

ten只想在不以开头时进行匹配cen

到目前为止,我有这个正则表达式:

(([^c][^e][^n])|^)ten

返回true在下列情况下tenaryblahtenary假的ctenarycetenarycentanary

package main

import (
    "fmt"
    "regexp"
)

func main() {
    txt := "ctenary"
    rx := `(([^c][^e][^n])|^)ten`
    re := regexp.MustCompile(rx)
    m := re.MatchString(txt)
    fmt.Println(m)
}

阅读 239

收藏
2020-07-02

共1个答案

小编典典

由于缺少对向前或向后搜索的支持,我们需要坚持使用否定的字符类-但[^c][^e][^n]不能完全覆盖它,因为它不允许cxxten,也不能覆盖之前没有3个字符的字符串ten

我想出(?:^|[^n]|(?:[^e]|^)n|(?:[^c]|^)en)ten,将其存储ten到第一个捕获的组中。它为每种不完全匹配的可能方式创建了替代方案cen

(.{0,3})(ten)如果第一个组存储,则替代方法可能是匹配,并以编程方式放弃该匹配cen

2020-07-02