2012-08-29 2 views
3

Я пытаюсь сделать положительный lookahead, чтобы соответствовать идентификатору объекта в заданном URL-адресе, независимо от того, где этот идентификатор объекта находится в URL-адресе. Идея заключается в том, чтобы соответствовать, либо «/», либо концу строки. Вот некоторые строки выборки (полужирный быть ID Я хочу, чтобы соответствовать):Положительный lookahead для соответствия '/' или конец строки

  • /объекты/obj_asd-1234-специальное
  • /объекты/obj_xyz-15434/Члены
  • /объекты/obj_aasdfaeastd-15d44/другие/ASDF

Использование этого: (. +)? объекты/объект _ (? = /) соответствует два последних, поскольку они оба имеют косую черту. Я прочитал, что lookahead поддерживает регулярное выражение как соответствующий символ, поэтому я попробовал эти объекты/obj _ (. +?) (? = (/ | $)) Безрезультатно. Есть предположения?

ответ

1

Вам не нужно использовать положительный предпросмотр:

/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' 
5

Попробуйте это:

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

Он просто делает нежадным матч между /objects/ и либо косой чертой или ВФ