正则问题:前面如果有成对的x 那么选,前面如果x不能匹配成对,则不选

ProjectDD 2019-04-07 12:09:32
[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);
}
}

加了前肯定零宽断言 就匹配不到了,去掉 (?<= ...) 这层皮 后可以匹配到结果,
这是为什么?
...全文
155 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wid999 2019-04-09
  • 打赏
  • 举报
回复
问题描述太不清楚了。
“正则问题:前面如果有成对的x 那么选,前面如果x不能匹配成对,则不选”
前面指哪?选的话选哪?x是不是重复使用?
liusa1997 2019-04-07
  • 打赏
  • 举报
回复
(?=\w{4}x)(\w)\1(\w)\2

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧