我需要获取满足以下逻辑的所有行:
[some text/][digits(one or more)]_[some text]
例如
'Main/Search/124_mobile'
'Main/Search/4_service'
首先,我需要获取这些行,然后获取_
符号前的数字。
我尝试过这种正则表达式:
regexp_like(event, '^[Main/Search/[1-9]+(?=_')
但是它仅提取像这样的行:
Main/Search/1_
并且不会提取_
符号前的很多位数的行
最后,我希望得到_
符号前的数字。对于值'Main/Search/124_mobile'
,它将为'124'
答案 0 :(得分:0)
您正在寻找的是这个。
SELECT REGEXP_REPLACE(event, '.*\/(\d+)\_.*', '\1')
首先,我发现使用Vertica RegEx函数最好使用\d
(数字的缩写)而不是\[0-9]
进行数字匹配。
模式.*\/(\d+)\_.*
与event
的整个值匹配,但是由于\d+
用括号括起来,因此它成为第一个捕获的组,表示为反斜杠1 {{1} }替换为{},因此即使\1
中的整个值都匹配,也只会显示第一组event
。
要过滤以使只有包含该模式的行出现在查询结果中,请使用\1
。
整个查询看起来像这样。
REGEXP_LIKE
上此页面上的最后一个示例(有关电话号码的底部示例)。