Контекст: Google Analytics
Необходимость: фильтр, который принимает данный URI или URN (да URN), возвращает все до исключенной строки запроса.
Как вы можете себе представить, тамэто множественные варианты, которые, я надеюсь, я полностью охватил приведенным ниже списком:
https://sub.domain.com/path/folder/article?l=en >> expected https://sub.domain.com/path/folder/article
https://sub.domain.com/path/folder/103#3173l=en >> expected https://sub.domain.com/path/folder/103
https://sub.domain.com/path/folder/103?#3173l=en >> expected https://sub.domain.com/path/folder/103
https://sub.domain.com/path/folder/103#?3173l=en
0sub.domain.tld >> expected sub.domain.tld
sub.domain.tld/ >> expected sub.domain.tld
sub.domain.tld?param=value >> expected sub.domain.tld
sub.domain.tld/?param=value >> expected sub.domain.tld
sub.domain.tld?param=value#id >> expected sub.domain.tld
sub.domain.tld/?param=value#id >> expected sub.domain.tld
sub.domain.tld/folder >> expected sub.domain.tld/folder
sub.domain.tld/folder/ >> expected sub.domain.tld/folder
sub.domain.tld/folder?param=value >> expected sub.domain.tld/folder
sub.domain.tld/folder/?param=value >> expected sub.domain.tld/folder
sub.domain.tld/1/folder >> expected sub.domain.tld/1/folder
sub.domain.tld/1/folder/ >> expected sub.domain.tld/1/folder
2sub.domain.tld/1/folder?param=value
3sub.domain.tld/1/folder/?param=value
4sub.domain.tld#id
5sub.domain.tld/#id
6sub.domain.tld/1#id
7sub.domain.tld/1/#id
Проблема, которую я не могу решить, - это получить регулярное выражение, совпадающее с вещами в подгруппе, которая всегда одинакова.
Если вам нужно поиграть, я сохранил пару тестов в - https://regex101.com/r/trZl06/1/ - https://regex101.com/r/SetgFn/2
Последний вполне удовлетворителен при захвате моегослучаев, но как только группа захвата добавляется перед существующим условием сопоставления, группа обретает даже слова, которые не ожидаются.
Я пробовал также что-то вроде ((.*)(?:[\/]\?.*)|(.*)(?:\?.*))|((.*)\/$|(.*))
, но результирующие подгруппы всегдаПо-другому делать ссылку в представлении фильтра немного беспорядочно.
Есть что-нибудь, о чем вы можете подумать?