我在一个长Regex模式中一个接一个地匹配了几个匹配的组。在中间我有
...(?<number>(?:/(?:digit|num))?\d+|)...
应匹配/num9
,/digit9
或9
或空白(因为我需要命名组出现在生成的关联数组中,即使它是空的)。
该模式有效,但如果前两个案例中的一个匹配,是否可以丢弃/
字符?我尝试了一个积极的前瞻,但如果你在前瞻之前有表情,似乎你不能使用它们。
我正在尝试使用正则表达式完成什么?
答案 0 :(得分:3)
根据您的输入,我认为您无论如何都需要捕获/
,否则您的整个正则表达式都会失败。同时你想忽略它,所以它不能成为你命名组的一部分。因此,通过将其置于其外部并使其成为可选项,同时确保数字不会直接由/
开头,您可以获得所需的结果:
^/?(?<number>(?:(?:digit|num))?(?<!/)\d+|)$
然而,鉴于您缺乏更完整的输入和正则表达式,我并非100%确定这适用于您的所有情况。