有没有办法设置捕获组的优先级
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
优先,我尝试了组和惰性运算符的组合,但其中大多数导致 post
在 pre
之前匹配,例如这个例子:
^(?<pre>[T])??(?<mid>[T][A-Z])?(?<post>[T])?$
有没有办法让mid
组在pre
之前匹配?你能设置某种匹配顺序吗?
我认为您不需要任何惰性运算符 - 只需明确地将 pre
与 mid
组合在一起,这样如果 pre
匹配,则需要 mid
:
^(?:(?<pre>T)?(?<mid>T[A-Z]))?(?<post>T)?$
或者更确切地说,我认为您希望 mid
与可选的 post
匹配,以便单个 T
输入仅与 pre
匹配:
^(?<pre>T)?(?:(?<mid>T[A-Z])(?<post>T)?)?$
我想要 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
优先,我尝试了组和惰性运算符的组合,但其中大多数导致 post
在 pre
之前匹配,例如这个例子:
^(?<pre>[T])??(?<mid>[T][A-Z])?(?<post>[T])?$
有没有办法让mid
组在pre
之前匹配?你能设置某种匹配顺序吗?
我认为您不需要任何惰性运算符 - 只需明确地将 pre
与 mid
组合在一起,这样如果 pre
匹配,则需要 mid
:
^(?:(?<pre>T)?(?<mid>T[A-Z]))?(?<post>T)?$
或者更确切地说,我认为您希望 mid
与可选的 post
匹配,以便单个 T
输入仅与 pre
匹配:
^(?<pre>T)?(?:(?<mid>T[A-Z])(?<post>T)?)?$