如何从abc **** ef ****之类的字段中选择?

Jej*_*ort 2 regex regex-group kdb

我有一个包含以下字段的表:

t:([]id:til 5; field:("abc_xy_ef";"abc_ef";"abc_de";"abc_xy_uv";"abc_ef_ghi"))

id field       
---------------
0  "abc_xy_ef" 
1  "abc_ef"    
2  "abc_de"    
3  "abc_xy_uv" 
4  "abc_ef_ghi"
Run Code Online (Sandbox Code Playgroud)

我只想选择字段遵循模式的行,"abc_[anything]_ef[anything]"以使结果表为:

id field       
---------------
0  "abc_xy_ef" 
1  "abc_ef"    
4  "abc_ef_ghi"
Run Code Online (Sandbox Code Playgroud)

Cal*_*ggs 7

通过放置多个where子句以过滤到所需结果,可以克服kdb中regex的局限性

q)select from t where field like "abc*", field like "*ef*"
id field
---------------
0  "abc_xy_ef"
1  "abc_ef"
4  "abc_ef_ghi"
Run Code Online (Sandbox Code Playgroud)

显然,这不是最有效的方法,因为在每个子句之后,所有结果都将再次处理。您可以引入文档https://code.kx.com/v2/kb/regex/#regex-libraries中指定的更全面的regex库,例如pcre2或re2。