Положительный просмотр назад с регулярным выражением

Я пытаюсь улучшить регулярные выражения

Я пытался написать регулярное выражение, которое получит такую ​​строку

404;http://subdomain.example.com:80/some-path/gallery/name-of-the-brand/23/?id=56&somethingelse=24...

И вернется

http://subdomain.example.com/some-path/gallery/

Итак, я пишу 2 выражения регулярного выражения, чтобы затем связать их вместе. Я уверен, что есть способ сделать все сразу, но я этого не знаю. Первый - для поддомена и домена http //:

[http://]+([a-z]+[\.])?[a-z]+[\.][a-z]+

Затем я пытаюсь написать один для / some-path / gallery /, поэтому я взял первый, добавил порт и попытался использовать это lookbehind, но я делаю это неправильно.

(?<=[http://]+([a-z]+[\.])?[a-z]+[\.][a-z]+?([0-9-:]+)[/]

Это будет работать на сервере Coldfusion


person Jack Pilowsky    schedule 28.01.2015    source источник
comment
Был в пабе, так что не хватало воли и способности анализировать ваши шаблоны, но, возможно, короче: регулярное выражение CFML вообще не поддерживает поиск назад. CF использует Apache ORO, поддержка которого прекращена около десяти лет назад, и просто не выполняет ретроспективный анализ. Извините.   -  person Adam Cameron    schedule 29.01.2015
comment
Хотел бы я быть в пабе прямо сейчас. Регулярные выражения, и я не так хорошо смешиваю   -  person Jack Pilowsky    schedule 29.01.2015
comment
Думаю, тогда я могу использовать 2 REReplaces. Один для удаления номера порта и один для удаления всего после / some-path / gallery /   -  person Jack Pilowsky    schedule 29.01.2015


Ответы (1)


Возможно что-то вроде этого:

^(\d+[;])?((http:\/\/)([^/:]*))([:]\d+)?((\/[^/]*)(\/[^/]*)\/).*$

Это регулярное выражение извлекает (под) домен и первые 2 папки, которые все красиво сгруппированы в группы захвата 2 и 6. Ниже пример:

http://regexr.com/3aaii

person Nebu    schedule 29.01.2015