消极的后视替代品

时间:2016-06-24 13:15:47

标签: regex go

我有一个字符串

centenary

我希望仅在ten之前不匹配cen

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

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

在以下情况下,truetenary返回blahtenaryctenarycetenarycentanary

返回false
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)
}

1 个答案:

答案 0 :(得分:6)

由于缺少对前瞻或后瞻的支持,我们需要坚持否定的字符类 - 但是[^c][^e][^n]并没有完全覆盖它,因为它不允许cxxten而且也没有覆盖字符串'{1}}之前的3个字符。

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

备选方案可能匹配cen,如果第一个组存储(.{0,3})(ten),则以编程方式丢弃匹配。

相关问题