Tri*_*ick 2 regex vbscript parsing regex-greedy
我正在尝试编写一个简单的SQL解析器来将sql语句分解为其基本部分.但是,我遇到嵌套查询的问题.一个例子说明最好的:
sql = "select * from Customers where id in (select customer_id from Orders where 1=1)"
Set re = New RegExp
re.IgnoreCase = True
re.Pattern = "^(.*)\swhere\s(.*)$"
re.Global = True
Set matches = re.Execute( sql )
If matches.count > 0 Then
Set submatches = matches(0).Submatches
where_part = Trim(submatches(1))
everything_else = Trim(submatches(0))
End If
Response.Write where_part & "<br>"
Response.Write everything_else & "<br>"
Run Code Online (Sandbox Code Playgroud)
在这里,我希望where_part包含"id in(从订单中选择customer_id,其中1 = 1)"和everything_else包含"select*from Customers".也就是说,我希望它尽可能地贪婪,第二个(.*)和第一个无私.换句话说,我希望everything_else不包含任何地方.
但是,我得到everything_else ="select*from customer in id in(select order_id from Orders"and where_part ="1 = 1)"
如何在不诉诸凌乱的非regexp字符串解析的情况下解决这个问题?
相反,你的正则表达式太贪婪了.
.*捕获最长的匹配字符串,直到您的示例中的第二个字符串.
试试这个:
^(.*?)\swhere\s(.*)
Run Code Online (Sandbox Code Playgroud)
的?使.*表现得不那么贪婪,这意味着它会在第一次发生时停止.