匹配'/'或字符串结尾的正向预测

dev*_*hts 6 regex regex-lookarounds

我正在尝试做一个积极的预测,以匹配给定URL中的对象ID,无论该对象ID在URL中的何处.想要匹配,直到字符串的'/'或结尾.以下是一些示例字符串(粗体是我想要匹配的ID):

  • / objects/obj_asd-1234-special
  • / objects/obj_xyz-15434/members
  • / objects/obj_aasdfaeastd-15d44/other/asdf

使用这个:objects/obj _(.+?)(?= /)匹配后两个,因为它们都有一个尾部斜杠.我读到前瞻支持正则表达式作为匹配字符,所以我尝试了这个对象/ obj _(.+?)(?=(/ | $))无济于事.有什么想法吗?

Boh*_*ian 7

试试这个:

/objects/(.*?)(/|$)
Run Code Online (Sandbox Code Playgroud)

它只是在/objects/斜线或eof 之间进行非贪婪的匹配


slu*_*ijs 6

此正则表达式匹配 EOF 或某个字符(即 /)。

(?<=\/objects\/obj_)(.+?)(?=\/|$)
Run Code Online (Sandbox Code Playgroud)

这是一个演示


Joã*_*lva 2

您不需要使用积极的前瞻:

/objects/([^/]+).*
Run Code Online (Sandbox Code Playgroud)

然后,第一组将保存您的 id 值。

下面是一个 Python 示例:

>>> import re
>>> p = re.compile('/objects/([^/]+).*')

>>> p.match("/objects/obj_asd-1234-special").group(1)
'obj_asd-1234-special'
>>> p.match("/objects/obj_xyz-15434/members").group(1)
'obj_xyz-15434'
>>> p.match("/objects/obj_aasdfaeastd-15d44/other/asdf").group(1)
'obj_aasdfaeastd-15d44'
Run Code Online (Sandbox Code Playgroud)