Подстрока регулярного выражения из URL - PullRequest
3 голосов
/ 20 января 2020

Мне нужно получить какое-то слово из URL:

WebViewActivity - https://google.com/search/?term=iphone_5s&utm_source=google&utm_campaign=search_bar&utm_content=search_submit

return Я хочу:

search/iphone_5s

но я застрял и не совсем понимаю, как использовать regexp_substr, чтобы получить это data.

Я пытаюсь использовать этот запрос

regexp_substr(web_url, '\google.com/([^}]+)\/', 1,1,null,1)

, который возвращает только слово 'search', а когда я пытаюсь

regexp_substr(web_url, '\google.com/([^}]+)\&', 1,1,null,1)

, получается Я слышу все слова до последнего '&'

1 Ответ

3 голосов
/ 20 января 2020

Вы можете использовать REGEXP_REPLACE для сопоставления всей строки, но перехватить две подстроки и заменить их двумя обратными ссылками на значения группы захвата:

REGEXP_REPLACE(
    'WebViewActivity - https://google.com/search/?term=iphone_5s&utm_source=google&utm_campaign=search_bar&utm_content=search_submit',
    '.*//google\.com/([^/]+/).*[?&]term=([^&]+).*',
    '\1\2')

См. Демонстрационный пример regex и онлайн Oracle демо .

Детали шаблона

  • .* - любой ноль или более символов, кроме символов разрыва строки как можно больше
  • //google\.com/ - подстрока //google.com/
  • ([^/]+/) - Группа захвата 1: один или несколько символов, отличных от /, а затем /
  • .* - любой ноль или более символов, кроме символов разрыва строки, максимально возможное количество
  • [?&]term= - ? или & и подстрока term=
  • ([^&]+) - группа захвата 2: один или несколько символов, отличных от &
  • .* - любой ноль или несколько символов, кроме символов разрыва строки, максимально возможное количество

ПРИМЕЧАНИЕ : Чтобы использовать этот подход и получить пустой результат, если совпадение не найдено, добавьте |.+ в конце шаблона регулярного выражения.

...