Q语言中如何转义通配符*,搜索含该符号的字符串
在kdb/q中转义
like中的通配符* 要在kdb/q的like操作中匹配字面的*(而不是把它当作通配符),你需要用**反斜杠\**来转义它。不过要注意q字符串的转义规则,下面给你具体的操作示例:
先看你的原始表
sl:([] s:(`$"g*g";`$"b*l";`$"bx"))
当你执行select from sl where s like "b*"时,*会被当作匹配任意长度字符的通配符,所以会返回所有以b开头的行(b*l和bx)。要只匹配包含字面*的b*l,可以用两种方法实现:
方法1:使用双引号字符串(需转义反斜杠)
在普通双引号字符串中,反斜杠本身是转义字符,所以需要用两个反斜杠\\来表示一个实际的\,以此转义*:
select from sl where s like "b\\*l"
方法2:使用Raw字符串(无需转义反斜杠)
用反引号`包裹字符串创建raw字符串,这样里面的反斜杠不需要额外转义,写法更直观:
select from sl where s like `$"b\*l"
两种方法执行后都会得到你想要的结果:
s --- b*l
扩展:匹配所有含字面*的行
如果想筛选出所有包含*的symbol,可以用:
select from sl where s like "*\\**"
这个查询会匹配任意位置包含*的行,结果是g*g和b*l。
内容的提问来源于stack exchange,提问作者user9499460
相关产品推荐
相关产品推荐

