如果我使用'|'有订单匹配在正则表达式中

时间:2012-11-16 08:06:42

标签: regex

我想从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|$),我得到了相同的错误答案

我想知道在使用|时是否有匹配的订单? 我该怎么办?

1 个答案:

答案 0 :(得分:1)

您的.*首先吃掉所有内容,包括whereclause,然后它与$匹配。原因是贪婪的*

你应该用懒惰附加它吗?

尝试FROM\s+(.*?)(\s+WHERE|$)