我在Hive中学习简单的正则表达式。我正在按照教程和简单的hql语句出错?
select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'Ben' )
这是我收到的错误消息:
Wrong arguments ''Ben'': org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String) on object org.apache.hadoop.hive.ql.udf.UDFRegExpExtract@ec0c06f of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments {Hello, my name is Ben. Please visit:java.lang.String, Ben:java.lang.String} of size 2
它适用于其他语言,但我想在Hive中学习它。任何帮助将不胜感激。
答案 0 :(得分:7)
您必须提供第三个参数,即要提取的组索引。
要提取完整匹配项,请使用0
:
select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'Ben', 0)
要提取捕获组值,请使用组索引,例如
select REGEXP_EXTRACT( 'Hello, my name is Ben. Please visit' , 'name is (\\w+)', 1)
将摘录Ben
。
请参阅this reference:
regexp_extract(string subject, string pattern, int index)
返回使用模式提取的字符串。例如,regexp_extract('foothebar', 'foo(.*?)(bar)', 2)
返回'bar.'
请注意,在使用预定义字符类时需要注意:使用'\s'
作为第二个参数将匹配字母s
;'\\s'
是匹配空格等所必需的。'index'
参数是Java正则表达式匹配器group()
方法索引。有关'index'
或Java正则表达式group()
方法的详细信息,请参阅 docs / api / java / util / regex / Matcher.html 。