Захватить последний элемент между или после / и до? - PullRequest
2 голосов
/ 05 марта 2020

Скажите, что у меня есть следующие URL:

https://test.com/welcome/
https://sub.test.com/home/edit
https://test.com/home/view?view=column
https://test.com/home/view/?view=list

Я хотел бы получить следующий результат:

welcome
edit
view
view

Сейчас у меня есть (?:\/[^\/]+)+?\/(.*?)/{0,1}$, (?:\/[^\/]+)+?(?:.*\/)(.*?)\?{0,1}$ и (?:\/[^\/]+)+?(?:.*\/)(.*)/\?.*$ но они сложные, и я не могу их объединить.

Ответы [ 3 ]

2 голосов
/ 05 марта 2020

В Splunk вы можете использовать регулярное выражение для сопоставления всего текста до последнего вхождения /, за которым следуют любые 1+ символов, отличные от /, ? или #, и эти 1+ символы могут быть захвачены с именованной группой захвата:

".*/(?<lasturlpart>[^/?#]+)"

См. демонстрационную версию regex . Обратите внимание, что \n или (?:/?(?:[#?].*|$)) в моем верхнем комментарии используются в демоверсии, чтобы убедиться, что совпадение не переполняется между строками, поскольку входные данные представляют собой одну многострочную строку в демоверсии, в то время как вы будете использование регулярных выражений для отдельных строк.

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

  • .* - любые 0 или более символов, кроме символов разрыва строки, как можно больше
  • / - / char
  • (?<lasturlpart>[^/?#]+) - Именованная группа захвата, соответствующая 1 или более символам, отличным от /, ? и #.
1 голос
/ 07 марта 2020
| makeresults
| eval _raw="https://test.com/welcome/
https://sub.test.com/home/edit
https://test.com/home/view?view=column
https://test.com/home/view/?view=list"
| makemv delim="
" _raw
| stats count by _raw
| rex "^.*\/(?<result>\w+)"

жадное совпадение в порядке.

\w равно [a-zA-Z0-9_]

1 голос
/ 05 марта 2020

Вы можете использовать регулярное выражение простого ванили:

(?<=[\/])[^\/?=]+(?=\/?$|\/?\?)

Демо

Регулярное выражение может быть записано в режиме свободного пробела 1 для самодокументирования:

/ 
(?<=[\/])     # match '/' or '?' in positive lookbehind
[^\/?=]+       # match 1+ chars other than '/', '?' and '='
(?=            # begin a positive lookahead
  \/?$         # optionally map '/' then match end of line    
  |            # or
  \/?\?        # optionally match '/' then match '?'
)              # end positive lookahead
/x             # free-spacing mode

1. Я не знаю, поддерживает ли Splunk режим свободного пространства, но это неважно, поскольку я использую его просто для того, чтобы показать, как работает регулярное выражение.

...