比较了一下api算法与正则算差距还是有点明显

程序代码:
DECLARE long sscanf IN msvcr71 long, string, single@, long@
DECLARE long strcpy IN msvcr71 string@, string
buffer = REPLICATE(0h00,256)
USE C:\_temp\gwmxz.dbf ALIAS td
SELECT * FROM td INTO CURSOR tmp READWRITE
SELECT tmp
FOR i=1 TO 10000
APPEND FROM DBF("td")
ENDFOR
#if 1 && 1 or 0
tm = SECONDS()
REPLACE ALL 合计 WITH f_合计(购物明细) IN "td"
? "api算法", SECONDS()-tm
#else
tm = SECONDS()
REPLACE ALL 合计 WITH RegExpTest("([.0-9_-])+(元)",购物明细) IN "td"
? "正则算法", SECONDS()-tm
#endif
*SELECT * FROM td
FUNCTION f_合计(c购物明细)
p = strcpy(@buffer, 购物明细)
a = 0.00
n = 0
t = 0
DO WHILE SYS(2600,p,1) != 0h00
IF sscanf(p,"%f%n",@a,@n) == 1
p = p+n
IF SYS(2600,p,2)=="元"
t = t+a
p = p+2
ENDIF
ELSE
p = p+1
ENDIF
ENDDO
RETURN t
ENDFUNC
Function RegExpTest(patrn, strng)
regEx = CreateObject("VBScript.RegExp") &&建立正则表达式对象
regEx.Pattern = patrn &&设置模式
regEx.IgnoreCase = .T. &&设置是否区分字符大小写
regEx.Global = .T. &&设置全局可用性
Matches = regEx.Execute(strng) &&执行搜索
RetStr=0
For Each Match in Matches &&遍历匹配集合
RetStr=RetStr+VAL(Match.Value)
Next
Return RetStr