我有一个字符串
centenary
我希望仅在ten
之前不匹配cen
。
到目前为止,我有这个正则表达式:
(([^c][^e][^n])|^)ten
在以下情况下,true
,tenary
返回blahtenary
,ctenary
,cetenary
,centanary
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)
}
答案 0 :(得分:6)
由于缺少对前瞻或后瞻的支持,我们需要坚持否定的字符类 - 但是[^c][^e][^n]
并没有完全覆盖它,因为它不允许cxxten而且也没有覆盖字符串'{1}}之前的3个字符。
我提出ten
,将(?:^|[^n]|(?:[^e]|^)n|(?:[^c]|^)en)ten
存储到第一个捕获的组中。它为每种可能的方式创建了不完全匹配ten
的替代方法。
备选方案可能匹配cen
,如果第一个组存储(.{0,3})(ten)
,则以编程方式丢弃匹配。