正则问题:前面如果有成对的x 那么选,前面如果x不能匹配成对,则不选
[TestMethod]
public void m22() {
var target="x23yx3z5x33x8w";
//前面如果有成对的x 那么选,前面如果x不能匹配成对,则不选
var pattern= @"(?<=(?<g>x)[^x]*(?<-g>x)(?(g)(?!))[^xyzw]*)[yzw]";
//pattern= "(?<g>x)[^x]*(?<-g>x)(?(g)(?!))[^xyzw]*";
pattern= "(?<g>x)[^x]*(?<-g>x)(?(g)(?!))[^xyzw]*[yzw]";
var r = Regex.Matches(target, pattern);
foreach (Match item in r) {
Console.WriteLine(item.Value);
}
}
加了前肯定零宽断言 就匹配不到了,去掉 (?<= ...) 这层皮 后可以匹配到结果,
这是为什么?