丢弃匹配组中的字符

时间:2012-08-15 20:58:14

标签: php regex

我在一个长Regex模式中一个接一个地匹配了几个匹配的组。在中间我有

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

应匹配/num9/digit99或空白(因为我需要命名组出现在生成的关联数组中,即使它是空的)。

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

我正在尝试使用正则表达式完成什么?

1 个答案:

答案 0 :(得分:3)

根据您的输入,我认为您无论如何都需要捕获/,否则您的整个正则表达式都会失败。同时你想忽略它,所以它不能成为你命名组的一部分。因此,通过将其置于其外部并使其成为可选项,同时确保数字不会直接由/开头,您可以获得所需的结果:

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

然而,鉴于您缺乏更完整的输入和正则表达式,我并非100%确定这适用于您的所有情况。