【发布时间】:2019-10-22 19:13:43
【问题描述】:
如果this regex:
^(?:(?:\([^\(\)]+\))|(?:(?<!\()[^\(\)]+(?!\))))$
匹配abc 和(abc),但不匹配(abc 或abc),为什么我不能在积极的前瞻like this 中使用它?
^(?=(?:(?:\([^\(\)]+\))|(?:(?<!\()[^\(\)]+(?!\)))))(?:\(?[a-z]+\)?)$
例如匹配abc)。
【问题讨论】:
-
您的第一个正则表达式可以简化为
^(?:\([^()]+\)|[^()]+)$。当你在前瞻中使用它时,你没有在最后锚定它,你没有使用$。您需要的第二个正则表达式就是^(?:\([a-z]+\)|[a-z]+)$。在 .NET 中,您还可以使用^(\()?[a-z]+(?(1)\))$,请参阅 demo。 -
您要遵循哪些规则?我最好的猜测是,您希望
a-z不带括号,带左括号或右括号,或同时带括号。 -
哇,棘手的@WiktorStribiżew。谢谢,我快疯了。并感谢您的削减。
-
@MonkeyZeus 是的,把它归结为,我想让字符包含在括号中或不包含在括号中。我试图阻止打开但不关闭,反之亦然。我将使用这种环视方法来查看许多不同的字符集,可选地用括号括起来。
-
那么
()有效吗?a(b)c、a)b(c、)(或(ab(c)呢?
标签: .net regex regex-lookarounds lookbehind