hive正则匹配字符串中 任意数量的字符开头 中间连续6个数字 任意数量字符结尾

新手上路,请多包涵

hive正则匹配字符串中 任意数量的字符开头 中间连续6个数字 任意数量字符结尾

select
    if(regexp_extract(f,'([^0-9]+[0-9].{6}+|||)',1) is not null and regexp_extract(f,'([^0-9]+[0-9].{6}+|||)',1) <>'',1,0) as flag
from
    dual

例如

snow|www.tom0750.com 返回 0
123654|www.tom075011.com 返回1
1236|www.tom075011.com 返回0
snow|123654|www.tom0750.com 返回1
snow321|123654|www.tom0750.com 返回1
winter|snow|123654|www.tom0750.com 返回1
spring|winter|snow|123654|www.tom0750.com 返回1
spring|winter|snow|123654|www.tom075011.com 返回1
spring|winter|snow|abc123|www.tom075011.com 返回0

求一个正则表达式,万分感谢

阅读 3.8k
2 个回答

从你初步的正则式看是要求恰好存在6个数字符的。
regexp '[^0-9]*\d{6}[^0-9]'
不过你的规则或者说例子有问题,你对中间的定义是什么?

1236|www.tom075011.com 返回0

上面也存在连续恰好6个数字符的,缺返回0?

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

新手上路,请多包涵
if((regexp_extract(f,'([0-9]{6}+\\|\\|\\|)',1) is not null and regexp_extract(f,'([0-9]{6}+\\|\\|\\|)',1) <>'')
     or (regexp_extract(f,'([0-9]{6}+\\|)',1) is not null and regexp_extract(f,'([0-9]{6}+\\|)',1) <>''),1,0)

已解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进