通过正则表达式从URL路径中提取数据

3
我将尝试从以下URL路径中提取数据:

/12345678901234567890123456789012/1230345035/wibble/wobble/

使用此正则表达式,我可以将其分为3个组:

\/([^\/]*)\/([^\/]*)(\/wibble\/wobble)

这让我得到:
group 1 = 12345678901234567890123456789012  
group 2 = /1230345035  
group 3 = /wibble/wobble  

然而这并不是我需要的 - 我正在尝试让提取在第二组中的数据也出现在第三组中,就像这样:
group 1 = 12345678901234567890123456789012  
group 2 = /1230345035  
group 3 = /1230345035/wibble/wobble 

但是我担心我在提取类似这样的数据时遇到了正则表达式的困难。

谢谢


最接近的模式是 https://regex101.com/r/2kqJbL/1,我猜。但是无法交换第二组和第三组。 - Wiktor Stribiżew
如果您的工具支持,可以考虑在前瞻中捕获:\/([^\/]*)\/(?=([^\/]+))([^\/]*\/wibble\/wobble)。但是可能并不需要这样做。 - bobble bubble
1个回答

1
首先,你提供的正则表达式不应该给出起始路径分隔符。因为你没有捕获分隔符,所以你应该看到类似这样的东西:
group 1 = 12345678901234567890123456789012  
group 2 = 1230345035
group 3 = wibble/wobble

将最后三个元素分组到所谓的组2中会更容易一些,然后使用复合捕获组来捕获这最后三个元素的第一部分到组3中,如下所示:

\/([^\/]*)\/(([^\/]*)\/wibble\/wobble)

\/               # opening slash
([^\/]*)         # anything that is not a slash, repeated 0+ times, as group 1
\/               # separating slash
(                # begin group 2
([^\/]*)         # anything that is not a slash, repeated 0+ times, as group 3
\/wibble\/wobble # literal text to match
)                # end group 2

这将给你以下匹配项:
group 1 = 12345678901234567890123456789012  
group 2 = 1230345035/wibble/wobble
group 3 = 1230345035

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接