Hello!
2012/6/13 刘太华 <de...@gmail.com>:
> local s = ngx.re.sub("token=fork&passwd=forpass&user=username",
> "passwd=(.*)&", "XXXX")
>
> 这样写,替换的结果是直接把"passwd=forpass&"全部覆盖成"XXXX"了,
> 看了下文档也没大明白,如何像perl中那样,只匹配"passwd=(.*)&"种括号内的。
>
我不明白你说的 perl 中的行为是哪种东西。在 perl 中的替换行为是这样的:
$ perl -e '$s="token=fork&passwd=forpass&user=username"; $s =~
s/passwd=(.*)\&/XXXX/; print $s'
token=fork&XXXXuser=username
可以看到,仍然会把 passwd=(.*)\& 的匹配子串都替换为 XXXX.
如果你想达到你说的效果,还是需要在替换为的目标串中显式写全,即
local s = ngx.re.sub("token=fork&passwd=forpass&user=username",
"passwd=(.*)&", "passwd=XXXX&")
另外,值得一提的是,给 ngx.re.sub 加上 "jo" 选项,即开启 PCRE JIT 加速和正则预编译缓存,一般会显著提升正则的执行性能。
Regards,
-agentzh