假设我有以下网址:
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}$
和(?:\/[^\/]+)+?(?:.*\/)(.*)/\?.*$
,但它们很复杂,我似乎无法将它们组合在一起。
4条答案
按热度按时间eyh26e7m1#
在Splunk中,您可以使用正则表达式来匹配所有文本,直到最后一次出现
/
,后跟除/
、?
或#
之外的任何1+字符,并且这些1+字符可以使用命名捕获组捕获:请注意,我的顶部注解中的
\n
或(?:/?(?:[#?].*|$))
在演示中用于确保匹配不会跨行溢出,因为在演示中输入的是单个多行字符串,而您将对独立字符串使用正则表达式。图案详细信息
.*
-除换行符外的任何0个或多个字符,尽可能多/
-一个/
字符(?<lasturlpart>[^/?#]+)
-与/
、?
和#
以外的一个或多个字符匹配的命名捕获组。xpszyzbs2#
您可以使用普通正则表达式:
Demo
正则表达式可以用 * 自由空格模式 *1编写,使其自文档化:
1.我不知道Splunk是否支持自由空间模式,但这无关紧要,因为我只是用它来展示正则表达式是如何工作的。
h7wcgrx33#
贪婪匹配是可以的。
是
p1iqtdky4#
简单化-正则表达式都很好,但是
split()
要简单得多(而且通常要快得多):这将使用正斜杠(“
/
”)作为分隔符将字段url
拆分为多值字段然后使用
mvindex
和-1
的索引选择最后一项,-1
始终是最后一项