我有一个弦
centenary
我ten只想在不以开头时进行匹配cen。
ten
cen
到目前为止,我有这个正则表达式:
(([^c][^e][^n])|^)ten
返回true在下列情况下tenary,blahtenary假的ctenary,cetenary,centanary
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) }
由于缺少对向前或向后搜索的支持,我们需要坚持使用否定的字符类-但[^c][^e][^n]不能完全覆盖它,因为它不允许cxxten,也不能覆盖之前没有3个字符的字符串ten。
[^c][^e][^n]
我想出(?:^|[^n]|(?:[^e]|^)n|(?:[^c]|^)en)ten,将其存储ten到第一个捕获的组中。它为每种不完全匹配的可能方式创建了替代方案cen。
(?:^|[^n]|(?:[^e]|^)n|(?:[^c]|^)en)ten
(.{0,3})(ten)如果第一个组存储,则替代方法可能是匹配,并以编程方式放弃该匹配cen。
(.{0,3})(ten)