正则表达式 - 从 .* 中排除分隔符

Regex - Excluding the separator character from .*

我有一个字符串,由 4 个子字符串的多个块组成,由 | 字符分隔。例如:

|255|UpdatePanel|updatePanel1|somecontent1234|

很可能会有多个连续的 4 个字符串块

|255|UpdatePanel|updatePanel1|somecontent1234|256|UpdatePanel|updatePanel2|someOtherContent|

现在我需要一个匹配每个块的正则表达式

\|([1-9]+)\|(UpdatePanel)\|(updatePanel1|updatePanel2)\|(.*)\|

问题是,这似乎匹配上面的整个示例字符串,而不是 4 个子字符串的 2 个匹配

我是否必须以某种方式从 .* 中排除分隔符 (|) 还是其他内容?

可以将贪心点匹配换成否定字符 class:

\|([1-9]+)\|(UpdatePanel)\|(updatePanel1|updatePanel2)\|([^|]*)

regex demo

[^|]* 模式将匹配 | 以外的零个或多个字符。因此,甚至不需要在最后使用 \|

请注意,您可以将 (updatePanel1|updatePanel2) 部分缩小为 (updatePanel[12]),甚至 (updatePanel\d+)