本文为您介绍字符串类型相关函数的语法、说明、参数、返回值和示例。

substr

函数详细解释如下:
  • 语法:substr(s, i, j)
  • 说明

    字符串截取操作。

  • 参数
    • s:目标字符串。
    • i:截取起始下标。从1开始,-1表示字符串最尾字符。整型。
    • j:截取终止下标。从1开始,-1表示字符串最尾字符。整型。
  • 返回值

    返回s的子字符串s[i, j]

  • 示例
    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'))
    }     
    
    说明:判断文件类型是否为.m3u8的2种方法

concat

函数详细解释如下:
  • 语法:concat(s1, ...)
  • 说明

    字符串连接操作。

  • 参数

    一个或多个参数,参数类型允许为数字字符串。

  • 返回值

    将多个参数连接为一个字符串,并返回该字符串。

  • 示例
    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'))
    }     
    
    说明:判断文件类型是否为.m3u8的2种方法

upper

函数详细解释如下:
  • 语法:upper(s)
  • 说明

    大写操作。

  • 参数

    s:目标字符串。

  • 返回值

    返回大写s

  • 示例
    mystr = 'Hello, Dsl'                                                                                                                                                                                   
    say(upper(mystr))                                                                                                                                                                                      
    say(lower(mystr)) 
    
    
    输出:
    HELLO,DSL
    hello, dsl

lower

函数详细解释如下:
  • 语法:lower(s)
  • 说明

    小写操作。

  • 参数

    s:目标字符串。

  • 返回值

    返回小写s

  • 示例
    mystr = 'Hello, Dsl'                                                                                                                                                                                   
    say(upper(mystr))                                                                                                                                                                                      
    say(lower(mystr)) 
    
    
    输出:
    HELLO,DSL
    hello, dsl

len

函数详细解释如下:
  • 语法:len(s)
  • 说明

    获取字符串的长度。

  • 参数

    s:目标字符串。

  • 返回值

    返回s的长度,整型。

  • 示例
    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'))
    }     
    
    说明:判断文件类型是否为.m3u8的2种方法

byte

函数详细解释如下:
  • 语法:byte(c)
  • 说明

    获取字符的ASCII码。

  • 参数

    c:目标字符,必须为单个字符。

  • 返回值

    返回对应的ASCII码,数字类型。

  • 示例
    say(byte('a'))
    say(byte('A'))
    
    输出:97
    65

match_re

函数详细解释如下:
  • 语法:match_re(s, p [, o])
  • 说明

    使用PCRE正则引擎,进行正则匹配。

  • 参数
    • s:目标字符串,字符类型。
    • p:正则表达式,字符类型。
    • o:正则引擎参数,字符类型,可选。

      i :大小写不敏感。

  • 返回值

    匹配成功返回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正则引擎。

  • 参数
    • 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正则引擎。

  • 参数
    • 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]                                                                                                                                                 
  • 参考

    PCRE正则语法:https://www.pcre.org/current/doc/html/pcre2syntax.html

split

函数详细解释如下:
  • 语法:split(s [,sep])
  • 说明

    分隔字符串,并返回分隔结果。

  • 参数
    • 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, 1)))
        }
    }
    
    请求:?from=xx1,xx2,xx3  
    响应:[1]=xx1  
    [2]=xx1                                                                                                                                                

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,dsl'])
    }
    
    请求:?from=xx1,xx2,xx3  
    响应:xx2=xx2 u=hi,dsl
    xx1=xx1 u=hi,dsl
    xx3=xx3 u=hi,dsl                                                                                                                                               

tohex

函数详细解释如下:
  • 语法:tohex(s)
  • 说明

    十六进制转换。

  • 参数

    s:字符串。

  • 返回值

    返回s的十六进制可读形式。

  • 示例
    digest = sha1('xxxx')
    add_rsp_header('X-DSL-TOHEX', tohex(digest))
    
    说明:增加响应头
    X-DSL-TOHEX: 4ad583af22c2e7d40c1c916b2920299155a46464                                                                                                                                             

tostring

函数详细解释如下:
  • 语法:tostring(a)
  • 说明

    字符串类型转换。

  • 参数

    a:任意类型。

  • 返回值

    返回参数a转换后的字符串。

  • 示例
    s = tostring(123)
    add_rsp_header('X-DSL-TOSTRING', s)
    
    说明:增加响应头
    X-DSL-TOSTRING: 123                                                                                                                                            

tochar

函数详细解释如下:
  • 语法:tochar(n1, n2, ...)
  • 说明
    • 接受1个或多个整型参数,返回对应整型参数的内部数值表示的字符串,例如:48对应于字符"0"。
    • 返回字符串的长度为参数个数。
  • 参数

    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)))
        add_rsp_header(hn, hv)
    }
    
    输出:增加响应头
    Content-Disposition: attachment;filename="请求参数filename的值"