J'essaie d'écrire un simple analyseur sql pour casser une déclaration SQL dans ses parties de base. Cependant, j'ai un problème avec les requêtes imbriquées. Un exemple illustre le mieux:VBScript RegExp pas Greedy Enough
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>"
Ici, je veux le where_part contenir "id dans (sélectionnez customer_id de commandes où 1 = 1)" et everything_else pour contenir "select * from clients". C'est-à-dire que je veux qu'il soit aussi gourmand que possible, pour le second (. *) Et altruiste pour le premier. Ou en d'autres termes, je veux que le tout_else ne contienne aucun endroit.
Cependant, je reçois everything_else = "select * from clients où id dans (sélectionnez customer_id de commandes" et where_part = "1 = 1)"
Comment puis-je remédier à cette situation sans avoir recours à malpropre chaîne non regexp analyse?
fonctionne parfaitement! –