substr
项目 | 描述 |
语法 | substr(s, i, j) 。
|
说明 | 字符串截取操作。 |
参数 | |
返回值 | 返回s 的子字符串s[i, j] 。 |
示例 | 判断文件类型是否为.m3u8的两种方法: 方法一: if eq(substr($uri, -5, -1), '.m3u8') {
say(concat($uri, ' is .m3u8'))
}
方法二: uri_len = len($uri)
if eq(substr($uri, -5, uri_len), '.m3u8') {
say(concat($uri, ' is .m3u8'))
}
|
concat
项目 | 描述 |
语法 | concat(s1, ...) 。
|
说明 | 字符串连接操作。 |
参数 | 一个或多个参数,参数类型允许为数字字符串。 |
返回值 | 将多个参数连接为一个字符串,并返回该字符串。 |
示例 | 判断文件类型是否为.m3u8的两种方法: 方法一: if eq(substr($uri, -5, -1), '.m3u8') {
say(concat($uri, ' is .m3u8'))
}
方法二: uri_len = len($uri)
if eq(substr($uri, -5, uri_len), '.m3u8') {
say(concat($uri, ' is .m3u8'))
}
|
format
项目 | 描述 |
语法 | format(fmt, ···) 。
|
说明 | 返回不定数量参数的格式化版本,格式化字符串为第一个参数(必须是一个字符串)。格式化字符串遵循ISO C 函数sprintf 的规则。 fmt 规则的格式为:%[指定参数][标识符][宽度][精度]指示符 。
%% 印出百分比符号,不转换。
%c 整数转成对应的ASCII字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
|
参数 | fmt:String类型,格式化字符串。 可变参数:任意类型。
|
返回值 | String类型。 |
示例 | say(concat('format:', format('%%%s$%.2s$%s$%c$%d$%2.2f$%.2o$%x$%X', 'format', 3.1415926, true, 95, 3.1415926, 3.1415926, 3.1415926, 10, 10)))
输出: format:%format$3.$true$_$3$3.14$03$a$A
|
upper
项目 | 描述 |
语法 | upper(s) 。
|
说明 | 将字符串中所有的小写字母转换成大写字母。 |
参数 | s:目标字符串。 |
返回值 | 返回大写s 。 |
示例 | mystr = 'Hello, AScript'
say(upper(mystr))
say(lower(mystr))
输出: HELLO, ASCRIPT
hello, ascript
|
lower
项目 | 描述 |
语法 | lower(s) 。
|
说明 | 将字符串中所有的大写字母转换成小写字母。 |
参数 | s:目标字符串。 |
返回值 | 返回小写s 。 |
示例 | mystr = 'Hello, AScript'
say(upper(mystr))
say(lower(mystr))
输出: HELLO, ASCRIPT
hello, ascript
|
len
项目 | 描述 |
语法 | len(s) 。
|
说明 | 获取字符串的长度。 |
参数 | s:目标字符串。 |
返回值 | 返回s 的长度,整型。 |
示例 | 判断文件类型是否为.m3u8的两种方法: 方法一: if eq(substr($uri, -5, -1), '.m3u8') {
say(concat($uri, ' is .m3u8'))
}
方法二: uri_len = len($uri)
if eq(substr($uri, -5, uri_len), '.m3u8') {
say(concat($uri, ' is .m3u8'))
}
|
byte
项目 | 描述 |
语法 | byte(c) 。
|
说明 | 获取字符的ASCII码。 |
参数 | c:目标字符,必须为单个字符。 |
返回值 | 返回对应的ASCII码,数字类型。 |
示例 | say(byte('a'))
say(byte('A'))
输出: 97
65
|
match_re
项目 | 描述 |
语法 | match_re(s, p, [o]) 。
|
说明 | 使用PCRE正则引擎,进行正则匹配,判断字符串是否匹配对应的正则表达式。更多信息,请参见PCRE正则语法。 |
参数 | s:目标字符串,字符类型。 p:正则表达式,字符类型。 o:正则引擎参数,字符类型,可选填。
|
返回值 | 匹配成功返回true ,否则返回false 。 |
示例 | url = concat('http://', $host, $uri)
m1 = match_re(url, 'http://.*\.dslex\.com/.*')
m2 = match_re(url, '^http://.*\.alibaba\.com\.cn/.*\.d\\.html(\?.*)?$')
m3 = match_re(url, '^http://.*.test.dslex.com/.*\.d\.html(\?.*)?$')
m4 = match_re(url, '^http://.*\.alibaba\.com\.cn/zt_d/')
m5 = match_re(url, '^http://tech.alibaba.com.cn/zt_d/we2015/?$')
m6 = match_re($args, 'from=wap1$')
m7 = match_re($args, 'from=comos1$')
if and(m1, or(m2, m3), not(m4), not(m5), or(not(m6), not(m7))) {
add_rsp_header('USER-DEFINED-1', 'hit1')
add_rsp_header('USER-DEFINED-2', 'hit2')
}
|
capture_re
项目 | 描述 |
语法 | capture_re(s, p, [init]) 。
|
说明 | 正则捕获,并返回捕获结果。使用PCRE正则引擎,更多信息,请参见PCRE正则语法。 |
参数 | s:目标字符串,字符类型。 p:正则表达式,字符类型。 init:指定匹配开始位置,下标从1开始,整型。
|
返回值 | 匹配成功的若干子串通过字典类型返回,匹配失败返回空字典。 |
示例 | pcs = capture_re($request_uri,'^/([^/]+)/([^/]+)([^?]+)\?(.*)')
sec1 = get(pcs, 1)
sec2 = get(pcs, 2)
sec3 = get(pcs, 3)
if or(not(sec1), not(sec2), not(sec3)) {
add_rsp_header('X-TENGINE-ERROR', 'auth failed - missing necessary uri set')
exit(403)
}
digest = md5(concat(sec1, sec3))
if ne(digest, sec2) {
add_rsp_header('X-TENGINE-ERROR', 'auth failed - invalid digest')
exit(403)
}
|
gsub_re
项目 | 描述 |
语法 | gsub_re(subject, regex, replace, [option]) 。
|
说明 | 正则替换,并返回替换后的副本。使用PCRE正则引擎,详细信息,请参见PCRE正则语法。 |
参数 | subject:目标字符串,字符类型。 regex:正则表达式,字符类型。 replace:替换字符,字符类型。 replace 部分可以引用匹配部分,即:
$0:表示regex 整体匹配的部分。 $N:表示regex 第N个() 匹配的部分。
option:正则引擎参数,字符类型,可选。
|
返回值 | subject 中所有的符合参数regex 的子串都将被参数replace 所指定的字符串所替换,并返回替换后的副本。
|
示例 | subject = 'Hello, Es'
regex = '([a-zA-Z])[a-z]+'
replace = '[$0,$1]'
add_rsp_header('X-DEBUG-GSUB-RE', gsub_re(subject, regex, replace))
输出: X-DEBUG-GSUB-RE: [Hello,H], [Es,E]
|
split
项目 | 描述 |
语法 | split(s, [sep]) 。
|
说明 | 分隔字符串,并返回分隔结果。 |
参数 | |
返回值 | 分隔元素包含在字典类型中返回,由数字下标作key ,起始下标为1,例如:[1]=xx, [2]=yy;若sep 为空,则默认以任意空白字符分隔。默认空白字符包含:空格、Tab。 |
示例 | if $arg_from {
t = split($arg_from, ',')
if get(t, 1) {
say(concat('[1]=', get(t, 1)))
}
if get(t, 2) {
say(concat('[2]=', get(t, 2)))
}
}
|
split_as_key
项目 | 描述 |
语法 | split_as_key(s, [sep]) 。
|
说明 | 分隔字符串,并返回分隔结果。 |
参数 | s:目标字符串,字符类型。 sep:分隔符,字符类型。
|
返回值 | 同split() ,区别在于key :[分割元素] ->[分割元素] 。 |
示例 | def echo_each(k, v, u) {
s = concat(k, '=', v, ' u=', get(u, 1))
say(s)
}
if $arg_from {
t = split_as_key($arg_from, ',')
foreach(t, echo_each, ['hi,ascript'])
}
响应: xx2=xx2 u=hi,ascript
xx1=xx1 u=hi,ascript
xx3=xx3 u=hi,ascript
|
tohex
项目 | 描述 |
语法 | tohex(s) 。
|
说明 | 十六进制转换。 |
参数 | s:字符串。 |
返回值 | 返回s 的十六进制可读形式。 |
示例 | digest = sha1('xxxx')
add_rsp_header('X-AScript-TOHEX', tohex(digest))
输出: X-AScript-TOHEX:4ad583af22c2e7d40c1c916b2920299155a46464
|
tobin
项目 | 描述 |
语法 | tobin(str) 。
|
说明 | 16进制转ASCII字符串。 |
参数 | str: 双字节16进制字符串,不区分大小写。 |
返回值 | String类型。 |
示例 | say(concat('tobin:', tobin('2F2F')))
输出: tobin://
|
tostring
项目 | 描述 |
语法 | tostring(a) 。
|
说明 | 字符串类型转换。 |
参数 | a:任意类型。 |
返回值 | 返回参数a 转换后的字符串。 |
示例 | s = tostring(123)
add_rsp_header('X-DSL-TOSTRING', s)
输出: X-DSL-TOSTRING: 123
|
tochar
项目 | 描述 |
语法 | tochar(n1, n2, ...) 。
|
说明 | |
参数 | nX:整型参数。 |
返回值 | 返回转换后的字符串。 |
示例 | add_rsp_header('X-DSL-TOCHAR', tochar(97))
add_rsp_header('X-DSL-TOCHAR', tochar(97, 98), true)
//输出:增加响应头
//X-DSL-TOCHAR: a
//X-DSL-TOCHAR: ab
if $arg_filename {
hn = 'Content-Disposition'
add_rsp_header('Content-Disposition', concat('attachment;filename=', tochar(34), filename, tochar(34)))
}
输出:增加响应头。 Content-Disposition: attachment;filename="请求参数filename的值"
|
reverse
项目 | 描述 |
语法 | reverse(str) 。
|
说明 | 字符串反转。 |
参数 | str:待反转的字符串。 |
返回值 | 返回字符类型,返回反转后的字符串。 |
示例 | say(reverse('hello'))
输出: olleh
|
find
项目 | 描述 |
语法 | string.find (s, substr, [pos]) 。
|
说明 | 在目标字符串中搜索指定的字符串。 |
参数 | |
返回值 | 成功:返回数组类型。 索引1,返回查找的起始位置。 索引2,返回查找的截止位置。
失败:返回空数组。
|
示例 | str = 'hello dsl'
add_rsp_header('string-find()-start:', tostring(get(find(str, 'dsl'), 1)))
str = 'hello dsl 12'
add_rsp_header('string-find()-end:', tostring(get(find(str, 'dsl'), 2)))
str = 'hello dsl'
add_rsp_header('string-find()-tail-start:', tostring(get(find(str, 'dsl', -6), 1)))
str = 'hello dsl 12'
add_rsp_header('string-find()-tail-end:', tostring(get(find(str, 'dsl', -6), 2)))
输出: string-find()-start:7
string-find()-end:9
string-find()-tail-start:7
string-find()-tail-end:9
|
trim
项目 | 描述 |
语法 | trim(s, [loc]) 。
|
说明 | 剔除s两端或指定端的全部空白字符,并返回剔除后的字符串。 |
参数 | s : 目标字符串。 loc(可选参数):默认为both,可用值如下: both:剔除两端。 left:仅剔除左端。 right:仅剔除右端。
|
返回值 | 返回剔除后的字符串。 |
示例 | say(concat('trim():', trim(' abcd ')))
say(concat('trim(left):', trim(' abcd ', 'left')))
say(concat('trim(right):', trim(' abcd ', 'right')))
输出: trim():abcd
trim(left):abcd
trim(right): abcd
|