怎么写正则匹配逗号分割的最后的表名?
我现在有这样的SQL
select dt from a.b.c where dt = '20210808' limit 10
我想先通过前缀namespace 进行匹配,如果匹配成功就返回表名, 比如我这里有 a.d. 多个前缀, a. 存在匹配成功,然后返回表名c 。如果这里是a.b 就返回b,这个正则该怎么写?用sed 或者 awk 甚至在PHP中实现
现在这个是我用PHP写的,但是获取的不是我想要的
$sql = "select dt from a.b.c where dt = '20210808' limit 10";
$tmp_table_name_parten = '/\.([^.]*$)/';
preg_match_all($tmp_table_name_parten, $sql, $match);
result:[[".c where dt = '20210808' limit 10"],["c where dt = '20210808' limit 10"]]
我现在能想到的就是基于空格+前缀+空格 这种形式来匹配表名,另外就是在sed awk 里怎么写呢?
另外还有一点需要注意就是a.b.c会有下划线的情况,例如: a_a.b_b.c
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
(?<=\.)[^.\s]+(?!\.)(?=\s|$)
sed 不支持零宽断言。可以用下面这个,不过会把
.
和后面的空白符一并选中。echo -e 'select dt from a_a.b_b.c_c where dt = 20210808 limit 10' | sed -n 's/\.\w\+\s/*****/ p'
表名不就两级么? 哪个数据库里面的表名会有三级+的?
select\s+.+\s+from\s+\w+\.(\w+)\.
分组里面的内容就是这个表名