Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从SQL语句捕获表名和别名的正则表达式_Sql_Regex - Fatal编程技术网

用于从SQL语句捕获表名和别名的正则表达式

用于从SQL语句捕获表名和别名的正则表达式,sql,regex,Sql,Regex,我需要一个正则表达式从表达式中提取表名和别名,如: INNER JOIN dbo.table1 t ON t.x = table n.y INNER JOIN table2 on table2.x = table n.y INNER JOIN table3 t3 on t3.x = tablen.y 从上面的查询中,我想捕获: (Table Name, Alias) table1, t table2, " " <-- No alias specified so blank or null

我需要一个正则表达式从表达式中提取表名和别名,如:

INNER JOIN dbo.table1 t ON t.x = table n.y
INNER JOIN table2 on table2.x = table n.y
INNER JOIN table3 t3 on t3.x = tablen.y
从上面的查询中,我想捕获:

(Table Name, Alias)
table1, t
table2, " " <-- No alias specified so blank or null
table3, t3
(表名、别名)
表1,t
表2,“您可以使用:

(?i)\bJOIN\s+([\w.]+)(?:\s+(?!ON\b)(\w+))?
但请注意,这可能会给出无效的结果,例如,如果您引用了具有匹配内容的字符串。在这种情况下,最好使用合适的SQL解析器而不是正则表达式。

您可以使用:

(?i)\bJOIN\s+([\w.]+)(?:\s+(?!ON\b)(\w+))?

但请注意,这可能会给出无效的结果,例如,如果您引用了具有匹配内容的字符串。在这种情况下,最好使用合适的SQL解析器而不是正则表达式。

您假设正则表达式的功能足够强大,可以解析像SQL这样的上下文无关语言

事实并非如此

你需要彻底地重新考虑你的策略,以及你的问题


我会在一个公认的解析器生成器中寻找SQL解析器,例如YACC/Bison、ANTLR、JavaCC,…

您假设正则表达式功能强大,足以解析像SQL这样的上下文无关语言

事实并非如此

你需要彻底地重新考虑你的策略,以及你的问题


我会在一个公认的解析器生成器中寻找SQL解析器,例如YACC/Bison、ANTLR、JavaCC,…

。但是使用合适的解析器通常更好。@QTax根据定义,它不是。否则解析器和REs就不会有什么不同了。您的引用不支持SQL可以用RE解析的断言。@EJP,请参阅链接。这个上下文中的正则表达式是不规则的。@Qtax我看到了链接并阅读了它。它没有说SQL可以用RE解析。如果你有一个反例来回答OP的实际问题,请提供它。@EJP,它没有这样说,它只是使你的论点无效。。但是使用合适的解析器通常更好。@QTax根据定义,它不是。否则解析器和REs就不会有什么不同了。您的引用不支持SQL可以用RE解析的断言。@EJP,请参阅链接。这个上下文中的正则表达式是不规则的。@Qtax我看到了链接并阅读了它。它没有说SQL可以用RE解析。如果你有一个反例来回答OP的实际问题,请提供它。@EJP,它没有这样说,它只是使你的论点无效。我稍后会尝试这个。谢谢。嗨,我已经快速试用了这个正则表达式,似乎适合我的需要!今晚我将把它集成到我的代码中,到时候我肯定会知道的。再次:非常感谢。@user1448758,别忘了你认为是值得的。;-)我稍后会试试这个。谢谢。嗨,我已经快速试用了这个正则表达式,似乎适合我的需要!今晚我将把它集成到我的代码中,到时候我肯定会知道的。再次:非常感谢。@user1448758,别忘了你认为是值得的。;-)