mysql - REGEXP_SUBSTR_GPL 未列出,我不清楚它需要什么参数。为什么要在 REGEXP_SUBSTR 上使用它?
问题描述
我试图在工作中分解前雇员的代码,该代码使用 Teradata SQL 助手中的一系列正则表达式从字符串中提取数据。
他们主要依靠以下循环:
WHEN (WHEN REGEXP_INSTR(source, pattern, 1, 1, 0 , 'i')(INT)) > 0
THEN
(REGEXP_SUBSTR_GPL(source, pattern, 1, 1, 'i', 1) (FLOAT))
我试图弄清楚这是在做什么,但我不明白它是如何REGEX_SUBSTR_GPL
工作的。我尝试查找它,它显然没有记录。我对 MySQL 很陌生,所以我想知道是否有人可以帮助我理解它在做什么,以及为什么有人会使用它REGEXP_SUBSTR()
。
此外,MySQL 中是否有一个命令可以让我找到有关此类函数的更多信息,以及有关它们采用哪些参数的更多信息?
谢谢你。
解决方案
在评论中 nbk 的帮助下,我们有了答案!
REGEXP_SUBSTR 的基本格式是:
REGEX_SUBSTR(source, pattern, start position, occurrence, matchOption)
对于 REGEXP_SUBSTR_GPL 它是:
REGEX_SUBSTR_GPL(source, pattern, start position, occurrence, matchOption, subexp, RETURN0)
subexpression 选项允许您选择要返回的子组,而不是返回整个正则表达式的结果。每个子组由一组括号表示。因此,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)'
我们有以下子组:
'([a-zA-Z]\w+)'
'(@)'
'(\w+)'
'(\.)'
'(\w+)'
当您设置subexp
为等于时0
,它以与 REGEXP_SUBSTR 相同的方式处理该函数。当您将其设置为大于零时,它会返回相应的子组(如果存在)。
请参阅以下示例
SELECT 'abc123@google.com' as text
,REGEXP_SUBSTR(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)', 1, 1, 'i') as REGEXP_1
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',0) as REGEXP_GPL_1
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',1) as REGEXP_GPL_2
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',2) as REGEXP_GPL_3
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',3) as REGEXP_GPL_4
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',4) as REGEXP_GPL_5
,REGEXP_SUBSTR_GPL(text,'([a-zA-Z]\w+)(@)(\w+)(\.)(\w+)',1,1,'i',5) as REGEXP_GPL_6
这将产生以下答案集:
文本 | 正则表达式_1 | REGEXP_GPL_1 | REGEXP_GPL_2 | REGEXP_GPL_3 | REGEXP_GPL_4 | REGEXP_GPL_5 | REGEXP_GPL_6 |
---|---|---|---|---|---|---|---|
abc123@google.com | abc123@google.com | abc123@google.com | abc123 | @ | 谷歌 | . | com |
谢谢大家的帮助!
推荐阅读
- linux - 包含文件名的两个文件之间的差异
- c# - 使用 Controls.Find() 找不到特定控件
- google-cloud-platform - 安排在 Google Cloud Platform 上停止和启动实例 - Cloud Scheduler 它是 Cloud Function
- excel - 条件格式 - 从渐变填充列中逐行应用整个表格的颜色
- python - 编辑字典列表中的值的最有效方法是什么?
- android - Firebase 存储存储 url 与参考
- python - 如何在python中设置预定义的周期数?
- unity3d - 在制作小地图后,我的玩家在 Unity 中缓慢移动
- python - 比较numpy数组逐元素设置逐元素结果
- python - Kivy:AttributeError:“超级”对象没有属性“__getattr__”