正则表达式可以获取周围的文本,但不能匹配其间的单词

时间:2017-10-19 15:02:50

标签: regex regex-lookarounds

我正在尝试编写正则表达式来提取URL,其端点具有以下格式:

https://api.siteurl.com/id/a1b2c3d4/apps

https://api.siteurl.com/id/a1b2c3d4/devices

...

etc

这些网址中的ID为a1b2c3d4,网址之间可能有所不同,但我想提取其周围的文字:

以下正则表达式匹配整个字符串:

https:\/\/\S+\.\S+\.com\/id\/\S+\/\S+

但是,我不想提取id本身,只想将它用作前瞻。

最终提取的字符串应该与https://api.siteurl.com/id'...'apps'

类似

实际上未提取...的地方。

是否只能使用2个正则表达式执行此操作,其中每个正则表达式使用前瞻和后视,或者是否可以使用单个表达式仅提取网址的相关部分?

1 个答案:

答案 0 :(得分:1)

您可以使用2个捕获组来捕获要保留的数据,并匹配您不想保留的数据。

(https:\/\/\S+\.\S+\.com\/id)\/[^\/]+\/(\S+)
  • (捕获第1组
    • https:\/\/\S+\.\S+\.com\/id匹配字符串的开头,直到id不包含/
  • )关闭群组
  • \/匹配以下/
  • [^\/]+\/匹配+1次除/以外的任何字符,然后匹配/
  • (\S+)捕获第2组匹配1次以上非空格字符

Regex demo

这是注释中没有非捕获组(?:的模式,因为这是不必要的。