【发布时间】:2019-06-19 14:39:28
【问题描述】:
如何在 Oracle 中使用 REGEXP_SUBSTR
获取我想要的这些数据SPRINTMVNO_PM_CDR_IWIRELESS_20121110_0813.csv get '08'in last four digits
RK_IPDR_RKMSG2_0043722_DT_20121113162710.txt get '0043722' in the middle(between'_')
wireless_201211120015_201211120515 get '0515' (last four digits)
我尝试了很多次,但有些表达式在 PHP 或其他语言中可以正常工作,但在 ORACLE 中不能正常工作。也许语法不同。
例如:第二个我可以使用/(?<=_)[0-9]*(?=_)/ 来获取 php 中的数字,但这在 Oracle 中不起作用。
我试过了
SELECT REGEXP_SUBSTR('RK_IPDR_RKMSG2_0043722_DT_20121113162710.txt','(?<=_)[0-9]*(?=_)')
FROM dual;
没有输出。所以不是两条斜线的问题
这个问题的另一种表述是“如何使用 Oracle 的正则表达式在字符之间获取内容或以字符开头但不包含?”
我知道我可以通过使用字符串函数轻松获取这些数据,问题是要处理大量不同的字符串,每个字符串都有不同的数据要检索。所以我想将模式存储到数据库中,并使用一个 regexp_substr 来获取所有数据。否则我需要对这些规则进行硬编码。
【问题讨论】:
-
您能解释一下您要应用的规则吗?您呈现三个字符串,每个字符串都有不同的输出。大概你想要三种不同的搜索模式。
-
您的问题似乎是,当这些字符串的大小、位置和含义完全随机时,如何从正则表达式中获取非随机字符串。?
-
@APC 是的,我想要三种不同的模式来从这三个字符串中找到特定的数据。对于我需要搜索的每个示例,都会有更多类似的字符串。 For example: RK_IPDR_RKMSG2_0043722_DT_20121113162710.txt this string may have other similar ones like RK_IPDR_RKMSG2_0043724_DT_20121113162712.txt ;RK_IPDR_RKMSG2_0043725_DT_20121113162711.txt the different part is what I want to get, which is the 7 digits number for this example, but the length may change
-
@Ben 很抱歉让您感到困惑,这是三组不同的字符串。
-
您的用例是什么?你得到一个随机字符串并应用所有这些模式来查看哪个匹配?你得到一堆字符串并只应用一个模式来查看哪个匹配?还是其他一些排列?您在一次搜索中处理什么样的数据量?另外,什么版本的数据库?
标签: regex oracle string-matching