Владислав - критика: шаблон у вас громоздкий и
медленный (это видно по количеству итераций [1046 steps]). Более эффективное по скорости решение:
~com/(?:[^/]+/)?\K[^/\s?]+~
UPD: Ответы на вопросы из комментариев:
я там не нашел буквы К и ?:
Если всмотреться, то там не один символ
K
, а последовательность символов
\K
, означающая сброс буфера регулярных выражений, или проще говоря - удаление из памяти найденных на данный момент совпадений. Символы
?:
вы тоже ошибочно вырвали из контекста - в оригинале они пишутся так:
(?:...
), и означают они незахватывающую группировку. Её отличие от обычной группировки
(...
) в том, что она не сохраняет в памяти группу символов, находящихся внутри скобок. Ну и последнее: последовательность символов
\s
означает символьный класс всех пробельных символов
(табуляция, перевод на новую строку, и т.п.).
P.S.: Возможно описанное выше вам покажется сложным для понимания - в таком случае рекомендую к прочтению книгу Джеффри Фридла "
Регулярные выражения 3-е издание".