我有一张这样的table
t:([] c1:til 5;c2:("abcde";"cdefg";"ecbda";"bsdee";"dbzeya"))
c1 c2
-----------
0 "abcde"
1 "cdefg"
2 "ecbda"
3 "bsdee"
4 "dbzeya"
我想在c2中选择包含字符串"*b*d*"
的行,我是这样做的:
pattern:"*b*d*"
select from t where c2 like pattern
但报告了错误。
nyi: Not yet implemented
我是从KX官网KX官网上发现这个错误的,但是没有办法解决这个问题,怎么办?先谢谢你了。
3条答案
按热度按时间u1ehiz5o1#
状态机可以在raw q中工作(尽管它们不是最有效的):
编辑:添加状态引擎的说明:
它定义了一组状态(用lambas表示),目标是到达最终状态,在本例中为状态3。满足这个特定正则表达式的字符串应该以状态3结束。逻辑遍历字符串中的每个字符,并从lambda 1开始针对相关lambda对其进行测试,即然后,每个lambda是一个测试,它确定字符串是否移动到下一个状态,即如果下一个字符不是“B”,
{1+x="b"}
将保持在状态1,但如果x="b"
将移动到状态2。等等7uzetpgm2#
交叉发布答案来自:
https://community.kx.com/t5/kdb-and-q/Why-regular-expression-doesn-t-work-with-bracket/m-p/13492
kdb+没有实现完整的正则表达式。
https://code.kx.com/q/basics/regex/
支持
?
*
[]
^
如果你想要完全的支持,你可以使用C接口引入外部库
或者Python:
6bc51xsx3#
你可以尝试这样的东西: