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

我想要 3 个共享一些字符的捕获组(前/中/后)。这三个都可以匹配 0 或 1 次,如下所示:

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

我正在寻找它们以按顺序匹配:mid -> pre -> post。 Regex 我已经发布了 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 之前匹配?你能设置某种匹配顺序吗?

回答1

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

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

(https://regex101.com/r/oHWhzp/1)

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

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

(https://regex101.com/r/ij6rno/1)

相似文章

r - 由于某些标准,在个体中找到最佳组合

我想从许多人中随机组成一组。对于个人,我有关于他们的位置(两种可能性)和他们所属位置的团队的信息。目前尚不清楚有多少人将加入。应根据以下限制组成组:团体一般应由3-4人组成在一个组内,位置之间的份额(...