日期:2014-05-17  浏览次数:20805 次

麻烦各位看看,这个正则怎么了,不是想要的效果,很奇怪~~
就这么多分了,请各位帮帮忙~~~

为什么结果是:
select Count(*) ME from ART a, ART_CLS c where a.CLS_ID=c.ID 

而不是:
select Count(*) from ART a, ART_CLS c where a.CLS_ID=c.ID


这是代码,直接执行就行:
VB code

str = "select a.*, c.NAME from ART a, ART_CLS c where a.CLS_ID=c.ID order by a.ID desc"

Set regEx = New RegExp
regEx.Global     = True
regEx.IgnoreCase = True
regEx.Pattern = "(Select)([^From]*)([\s\S]*)"
sql=regEx.Replace(str,"$1 Count(*) $3")
regEx.Pattern = "([^order]*)(order\s*by\s*[^\s]*\s*[asc|desc]*)(\s*[,]?\s*[^\s]?\s*[asc|desc]?)*([\)]*)$"
sql=regEx.Replace(sql,"$1$4")

response.write sql



------解决方案--------------------
[] 里面的字符串会一个个拆开的,不成看成一个整体,即使加()也不行,
你regEx.IgnoreCase = True
所select a.*, c.NAM
前面到A就匹配完([^From]*)了,后面是([\s\S]*)的

试一下这样
regEx.Pattern = "(Select)(.*?=from)([\s\S]*)" 我这边没ASP环境,不知道ASP的正则具体有什么差别,但按照思路你应该可以写得出来的。
------解决方案--------------------
regEx.Pattern = "(Select)((?!From).*?)(from [\s\S]*)"

同没ASP环境 不过这个在C#环境下是测试通过的