相关文章推荐
神勇威武的鸵鸟  ·  Caused by: ...·  2 月前    · 
不爱学习的番茄  ·  CHAR (Transact-SQL) - ...·  3 月前    · 
字符串类型相关

字符串类型相关

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

substr

函数详细信息,请参见下表。

项目

描述

语法

substr(s, i, j)

说明

字符串截取操作。

参数

  • s:目标字符串。

  • i:整型,截取起始下标。从 1 开始,-1 表示字符串最尾字符。

  • j:整型,截取终止下标。从 1 开始,-1 表示字符串最尾字符。

返回值

返回 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, ...)

说明

字符串连接操作。

参数

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

返回值

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

示例

// 下面展示将三个字符串拼接起来
str1 = 'hello'
str2 = ' '
str3 = 'world'
say(concat(str1, str2, str3))

输出:

  hello world

upper

函数详细信息,请参见下表。

项目

描述

语法

upper(s)

说明

将字符串中所有的小写字母转换成大写字母。

参数

s:目标字符串。

返回值

返回大写 s

示例

str = 'hello world'                                                                                                                                                                                   
say(upper(str)) 

输出:

HELLO WORLD

lower

函数详细信息,请参见下表。

项目

描述

语法

lower(s)

说明

将字符串中所有的大写字母转换成小写字母。

参数

s:目标字符串。

返回值

返回小写 s

示例

str = 'HELLO WORLD'
say(lower(str))

输出:

hello world

len

函数详细信息,请参见下表。

项目

描述

语法

len(s)

说明

获取字符串的长度。

参数

s:目标字符串。

返回值

返回 s 的长度,整型。

示例

str = 'hello world'
say(len(str)) // 返回str的长度,这里是11

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:正则引擎参数,字符类型,可选填。

    • 不填写:则区分大小写。

    • 填写为 i:则不区分大小写。

返回值

匹配成功返回 true ,否则返回 false

示例

str = 'Hello'
// 完全匹配Hello字符
say(match_re(str, 'Hello'))
// 匹配hello忽略大小写
say(match_re(str, 'hello', i))
// 匹配以l结尾的字符
say(match_re(str, '.*l$'))

输出:

true
false

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)
}                                                                                                                                                      

响应示例

"X-TENGINE-ERROR:auth failed - missing necessary uri set"

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])

说明

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

参数

  • 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)))
}                                                                                                                                

请求:

http://www.example.com?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'])
}                                                                                                                                  

请求:

http://www.example.com?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 转换后的字符串。

示例

say(tostring(123))

输出:

123

tochar

函数详细信息,请参见下表。

项目

描述

语法

tochar(n1, n2, ...)

说明

  • 接受 1 个或多个整型参数,整型参数为 ASCII 值,例如“0”的 ASCII 值为 48,则 tochar(48)就返回字符“0”。

  • 返回字符串的长度为参数个数。

参数

nX:整型参数,ASCII 值。

返回值

返回转换后的字符串。

示例

say(tochar(97))
say(tochar(65))

输出:

a
A

reverse

函数详细信息,请参见下表。

项目

描述

语法

reverse(str)

说明

字符串反转。

参数

str:待反转的字符串。

返回值

返回字符类型,返回反转后的字符串。

示例

say(reverse('hello'))

输出:

olleh

find

函数详细信息,请参见下表。

项目

描述

语法

string.find (s, substr, pos)

说明

在目标字符串中搜索指定的字符串。

参数

  • s:待查找的字符串。

  • substr:需要查找的子串。

  • pos(可选参数):该参数为索引,类型为数值,指定查找的起始位置。可以为负数,默认起始位置为 1。

返回值

  • 成功:返回数组类型。

    • 索引 1,返回查找的起始位置。

    • 索引 2,返回查找的截止位置。

  • 失败:返回空数组。

示例

str = 'hello world'
say(concat('r start pos: ',get(find(str, 'r'), 1)))
say(concat('r end pos: ',get(find(str, 'r'), 2)))
say(concat('rl start pos: ',get(find(str, 'rl'), 1)))
say(concat('rl end pos: ',get(find(str, 'rl'), 2)))

输出:

r start pos: 9
r end pos: 9
rl start pos: 9
rl end pos: 10

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

tobin

函数详细信息,请参见下表。

项目

描述

语法

tobin(str)

说明

16 进制转 ASCII 字符串。

参数

str:双字节 16 进制字符串,不区分大小写。

返回值

返回值为 string 类型。

示例

say(concat('tobin:', tobin('2F2F')))

输出:

tobin://

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