При выполнении preg_match с OR (|), существует логический способ определить соответствующее регулярное выражение.
@regex = ~^(?|/|/about|/about/class/(?<id>[^/]+)/fox|/about/class/(?<id>[^/]+)/(?<type>[^/]+)/fox|/about/class/(?<id>[^/]+)/(?<type>[^/]+)/fox/(?<boat>[^/]+))$~x
preg_match(@regex, '/about/class/test1/test2/fox', $results);
Пример будет соответствовать и предоставить мне названные группы по мере необходимости
matches /about/class/(?<id>[^/]+)/(?<type>[^/]+)/fox in @regex
id = test1
type = test2
Есть ли логический способ узнать, какая часть @regex соответствует?
НАЙТИ РЕШЕНИЕ:
|/about/class/([^/]+)/fox(*MARK:some-name)|...
массив результатов будет содержать ключ MARK, содержащий 'some-name'. Идея здесь состоит в том, чтобы иметь отдельную структуру данных, которая отображает 'some-name' в соответствующее регулярное выражение. Это позволяет легко использовать сброс ветви "? |"