我想从sql获取表名(例如:select name from user where id>5
)。
我尝试使用正则表达式,我的模式为from\s+(.*)(\s*$|where)
当sql不包含'where'时,没关系。但是如果sql包含'where',我会得到'user where id> 5'作为答案。
因为sql可能没有“where”,所以我使用$
,但(.*)(\s*$)
几乎可以匹配所有内容,我尝试使用此from\s+(.*)(\s*where|$)
,我得到了相同的错误答案
我想知道在使用|
时是否有匹配的订单?
我该怎么办?
答案 0 :(得分:1)
您的.*
首先吃掉所有内容,包括whereclause,然后它与$
匹配。原因是贪婪的*
你应该用懒惰附加它吗?
尝试FROM\s+(.*?)(\s+WHERE|$)