我需要从包含SQL查询的字符串中获取schemaName.tableName。
例如
Select t1.column1, t1.column2, t2.column3, to.column4 from ABC.TABLE1 t1 inner join XYZ.TABLE2 t2 where t1.id=t2.id;
正则表达式匹配后,我应该得到一个包含schemaName.tableName的数组
[ABC表1,XYZ表2]
这个模式应该能够从任何SQL查询中获取schemaName.tableName。
我怎样才能创造出这种模式请帮助我。
我试着跟着,但没有结果
https://regex101.com/r/D82EJh/1
[^\/,\s\?#]+?\.[^\/,\s]+?(?=\/|\s|$|\?|#)
2条答案
按热度按时间qf9go6mv1#
这个模式应该能够从任何SQL查询中获取schemaName.tableName。
要完成这个公式化的任务,您需要组织一个完整的项目,但项目的成功与否取决于所选择的sql语言的方言。也许您会满足于解决一个更简单的问题:如何得到单词"from"或"join"后面的单词数组(包括点)。然后我在下面提出这样的解决方案。
此代码应显示在控制台中:* ["ABC表格1"、"XYZ表格2"]*
cgh8pdjw2#
您可以使用捕获组,并匹配允许的字符:
\b
字边界(?:join|from)\s+
匹配join或from,后跟1个或多个空格字符(
捕获组1 (保存所需值)\w+\.\w+
匹配1个或多个单词字符,然后匹配一个点,再匹配1个或多个单词字符)
关闭组1参见regex101 demo。
如果单词字符后面应该有1个点并且没有更多的非空白字符,则可以Assert空白边界: