Hive QL(RLIKE)中的正则表达式?
我想知道如何/如果我可以改善我在查询中使用的正则表达式。我有一组用于特定用户组的标识符。它们可以是在两个主要格式:Hive QL(RLIKE)中的正则表达式?
-
X123
或XY12
,(1型) - 任何两个字母的组合,不包括XY(2型)
类型1组始终是长度为4的它可以是字母X后跟一个介于100和999之间的数字或XY后跟数字0和99之间的数字(用零填充到长度2)。
类型2组是2个字母的字符串,允许任何字母,不包括XY(尽管我的查询没有指定这个字符串)。
用户可以属于多个组,在这种情况下,不同的组由磅符号分隔(#
)。下面是一个例子:
groups user age
X124 john 23
XY22#AB mike 33
AB peter 21
X122#XY01 francis 43
我想,其中用户是不排他地在第一格式组的成员进行计数,其中在第二格式的至少一个基团出现的行,即。
我需要捕捉所有不属于第一类组的专用行(即用户)。在上面的示例中,我想排除用户约翰和弗朗西斯,因为它们只是类型1组的成员。 另一方面,麦克是可以的,因为他是AB组的成员(即组2类型的成员)。
目前,我正在做这样的:
select
count(*)
from
users
where
groups not rlike '^(X[Y1-9][0-9]{2,2})(#X[Y1-9][0-9]{2,2})*$'
这是糟糕的表现明智?我应该如何解决它?
我想计算至少有一组出现第二种格式的行。
这似乎再简单一点,选择where groups like
:
\b(?:(?!XY)[A-Z]{2})\b
\b
是一个字边界。它不消耗一个字符,而是指出那里不能有非字母数字字符。
而写了我的答案,您在示例中排除了AY。你的衣服抓住了AY。否则,它看起来更简单。 – hummingBird
你说'任何两个字母组合,只要第二个不是Y(类型2)'。 我已经更新了“组2不包括XY'的演示:https://regex101.com/r/EZRsuZ/2 – linden2015
好吧,它是一个编辑..我的坏。我添加了一些修改,但我也修复了组描述。 – hummingBird
你的问题可能会做的更好位置:https://codereview.stackexchange.com/ –
@JimSimson我冷静瓦特/那 - 只是不知道如何/如果我可以将它移到 – hummingBird
我并不是说,这里是错的,只是可能想在那里发帖。 –