1

我在一个很长的正则表达式模式中一个接一个地有几个匹配的组。在中间我有

...(?<number>(?:/(?:digit|num))?\d+|)...

它应该匹配类似/num9,/digit99或空白的东西(因为我需要命名组出现在结果关联数组中,即使它是空的)。

/该模式有效,但是如果前两种情况之一匹配,是否可以丢弃该字符?我尝试了一个积极的前瞻,但如果你在前瞻之前有表达式,你似乎不能使用那些。

我正在尝试使用正则表达式来完成吗?

4

1 回答 1

3

根据您的输入,我认为您/无论如何都需要在某个时候捕获,否则您的整个正则表达式都会失败。同时你想忽略它,所以它不能成为你命名组的一部分。因此,通过将其放在它之外并使其成为可选的,同时确保一个数字前面没有直接由 a/您提出所需的结果:

^/?(?<number>(?:(?:digit|num))?(?<!/)\d+|)$

但是,鉴于您缺乏更完整的输入和正则表达式,我不能 100% 确定这将适用于您的所有情况。

于 2012-08-15T21:15:43.837 回答