我有一个所有类型的页面事件的列表,这些列表事件的列值是使用listagg方法按时间asc排序的。listagg(page,';') within group (order by time)
我想获取与正则表达式匹配的最后一个匹配项regexp_substr(event_list,'/step[0-9]+[^;]*')
根据docs“,一个正整数,指示要开始搜索的source_string中的位置。该位置基于字符数,而不是字节数,因此多字节字符被视为单个字符。默认值为1。小于1,搜索从source_string的第一个字符开始。如果position大于source_string中的字符数,则结果为source_string。“
基于此,我需要知道我不知道的确切发生次数。在这种情况下如何获得最后一场比赛?例如:/step1;somethging;somethig;/step2;something;/step3;something;
我想匹配步骤3。
PS:按时间顺序排序并获得第一个比赛不是这里的选项。
使用regexp_count
确定有多少个匹配项(regexp_count
),然后使用n
获得第regexp_substr
个匹配项。
regexp_substr
输出:
n
如果select
'/step1;somethging;somethig;/step2;something;/step3;something;' string
, '/step[0-9]+[^;]*' pat
, regexp_count(string, pat) n
, regexp_substr(string, pat, 1, n) last_part
可以被当作分隔符,那么您可以选择采用以下策略
颠倒字符串,用 string pat n last_part
/step1;somethging;somethig;/step2;something;/step3;something; /step[0-9]+[^;]* 3 /step3
分割并取第一部分。再次反转,以/
为前缀并应用正则表达式以提取步骤:
示例:
/
输出:
/