regex kdb:如何匹配复杂字符串

8ehkhllq  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(148)

我有一张这样的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官网上发现这个错误的,但是没有办法解决这个问题,怎么办?先谢谢你了。

u1ehiz5o

u1ehiz5o1#

状态机可以在raw q中工作(尽管它们不是最有效的):

q)m:({0};{1+x="b"};{2+x="d"};{3});
q)select from t where 3=1 m/'c2
c1 c2
----------
0  "abcde"
2  "ecbda"
3  "bsdee"

编辑:添加状态引擎的说明:
它定义了一组状态(用lambas表示),目标是到达最终状态,在本例中为状态3。满足这个特定正则表达式的字符串应该以状态3结束。逻辑遍历字符串中的每个字符,并从lambda 1开始针对相关lambda对其进行测试,即然后,每个lambda是一个测试,它确定字符串是否移动到下一个状态,即如果下一个字符不是“B”,{1+x="b"}将保持在状态1,但如果x="b"将移动到状态2。等等

6bc51xsx

6bc51xsx3#

你可以尝试这样的东西:

select from t where{0<last deltas(first where x="b";last where x="d")}each c2

相关问题