求匹配通配符深度小于3级的路径的正则表达式
适配SQL REGEXP_LIKE的路径匹配正则
正则表达式
^(?:\*|(?:[^/*]*(?:\*[^/*]*)*\/){0,2}[^/*]*(?:\*[^/*]*)*(?:\/[^/*]*)*)$
核心逻辑
- 支持单独的
*直接匹配 - 所有带
*的目录段必须落在前3个层级(按/分割路径,从0开始计数):- 比如
abc*/def/ghij里*在第1段,符合;/abc/*def/ghij里*在第3段,符合 - 而
/abc/def/*里*在第4段,超出限制,不匹配
- 比如
- 第4段及以后的目录里不能出现
*
SQL中使用的转义版本
因为SQL字符串需要转义反斜杠,所以实际在REGEXP_LIKE里用的表达式是:
'^(?:\\*|(?:[^/*]*(?:\\*[^/*]*)*\\/){0,2}[^/*]*(?:\\*[^/*]*)*(?:\\/[^/*]*)*)$'
测试用例
匹配成功
*abc*/def/ghij/abc/*def/ghij*/abc/defabc*def/ghi/jkl
匹配失败
/abc/def/*abc/def/ghi/*j/a/b/c/*d
内容的提问来源于stack exchange,提问作者Yanis Petras
相关产品推荐
相关产品推荐

