有没有办法设置捕获组的优先级

Is there a way to set the precedence of capturing groups

我想要 3 个共享一些字符的捕获组 (pre/mid/post)。这三个都可以匹配 0 次或 1 次,像这样:

^(?<pre>[T])?(?<mid>[T][A-Z])?(?<post>[T])?$

我正在寻找它们以按顺序匹配:mid -> pre -> post。正则表达式 我发布了 3/4 字母字符串的作品,例如 TTT / TTU / TUT。对于两个字符串 TT,我希望匹配组 mid - 结果是 pre: T, post: T。我明白为什么会这样 - pre 匹配,mid 找不到两个匹配的字符,post 匹配。

为了使 mid 优先,我尝试了组和惰性运算符的组合,但其中大多数导致 postpre 之前匹配,例如这个例子:

^(?<pre>[T])??(?<mid>[T][A-Z])?(?<post>[T])?$

有没有办法让mid组在pre之前匹配?你能设置某种匹配顺序吗?

我认为您不需要任何惰性运算符 - 只需明确地将 premid 组合在一起,这样如果 pre 匹配,则需要 mid

^(?:(?<pre>T)?(?<mid>T[A-Z]))?(?<post>T)?$

(online demo)

或者更确切地说,我认为您希望 mid 与可选的 post 匹配,以便单个 T 输入仅与 pre 匹配:

^(?<pre>T)?(?:(?<mid>T[A-Z])(?<post>T)?)?$

(online demo)