我在 Apache Hive 中遇到了一段代码,例如 regexp_extract(input, '[0-9]*', 0),有人可以向我解释一下这段代码的作用吗?谢谢
			
			49953 次
		
3 回答
            21        
        
		
从Hive 手册 DDL中,它返回使用模式提取的字符串。例如regexp_extract('foothebar', 'foo(.*?)(bar)', 2)返回bar。
index参数是捕获组,它是一个整数,可以取以下值:
- 0:整个比赛,在我的例子中是foothebar
- 1:第一组,在我的例子中是the
- 2:第二组 在我的例子中是bar
- n:第n组。如果 n 大于您的正则表达式中定义的实际组数,您的 Hive 查询将失败。
在您的示例中regexp_extract(input, '[0-9]*', 0),您正在寻找由数值标识input并以数值开头的列的整个匹配项。
这里有一些例子:
- regexp_extract('9eleven', '[0-9]*', 0)-> 返回- 9
- regexp_extract('9eleven', '[0-9]*', 1)-> 查询失败
- regexp_extract('911test', '[0-9]*', 0)-> 返回- 911
- regexp_extract('911test', '[0-9]*', 1)-> 查询失败
- regexp_extract('eleven', '[0-9]*', 0)-> 返回空字符串
- regexp_extract('test911', '[0-9]*', 0)-> 返回空字符串
于 2013-01-17T03:41:59.917   回答
    
    
            3        
        
		
上面的答案部分不正确。regexp_extract('test911', '[0-9]*', 0)肯定会返回 911。我们之前从未指定字符串的开头[0-9]*
于 2013-07-01T18:02:06.067   回答
    
    
            -1        
        
		
正则表达式regexp_extract(input, '[0-9]*', 0)将给出输入字符串中的所有起始数字。
例如,
select regexp_extract('442323test41234', '[0-9]*', 0) ==> 442323
select regexp_extract('44test41234', '[0-9]*', 0) ==> 44
select regexp_extract('test41234', '[0-9]*', 0) ==> 1
但这不是提取起始数字的最佳方法。以下是更易读的格式:
select regexp_extract(input, '^([0-9]+).*?$', 1)
上面的正则表达式说,列出字符串中开始的所有数字并忽略其余数字。
于 2019-10-24T06:27:29.380   回答