10

我正在尝试进行积极的前瞻来匹配给定 URL 中的对象 ID,而不管该对象 ID 在 URL 中的位置。这个想法是匹配直到一个 '/' 或字符串的结尾。以下是一些示例字符串(粗体是我要匹配的 ID):

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

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

4

3 回答 3

7

尝试这个:

/objects/(.*?)(/|$)

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

于 2012-08-29T11:56:53.567 回答
7

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

(?<=\/objects\/obj_)(.+?)(?=\/|$)

这是一个演示

于 2019-01-31T12:38:08.100 回答
2

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

/objects/([^/]+).*

然后,第一组将保存您的 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'
于 2012-08-29T00:27:35.603 回答