如何获得字符前的所有数字?

时间:2019-03-26 14:28:58

标签: sql regex vertica

我需要获取满足以下逻辑的所有行:

[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'

1 个答案:

答案 0 :(得分:0)

您正在寻找的是这个。

SELECT REGEXP_REPLACE(event, '.*\/(\d+)\_.*', '\1')

首先,我发现使用Vertica RegEx函数最好使用\d(数字的缩写)而不是\[0-9]进行数字匹配。

模式.*\/(\d+)\_.*event的整个值匹配,但是由于\d+用括号括起来,因此它成为第一个捕获的组,表示为反斜杠1 {{1} }替换为{},因此即使\1中的整个值都匹配,也只会显示第一组event

要过滤以使只有包含该模式的行出现在查询结果中,请使用\1

整个查询看起来像这样。

REGEXP_LIKE

有关更多信息,请参见文档https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/RegularExpressions/REGEXP_REPLACE.htm

上此页面上的最后一个示例(有关电话号码的底部示例)。