zoukankan      html  css  js  c++  java
  • 常用lua代码块

    1、读取请求体中参数

     1 local request_method = ngx.var.request_method
     2 local args
     3 --获取参数的值
     4 if "GET" == request_method then
     5     args = ngx.req.get_uri_args()
     6 elseif "POST" == request_method then
     7     ngx.req.read_body()
     8     args = ngx.req.get_post_args()
     9 end
    10 local param = args["param"]

    2、string库

    2.1 string.len(s)    

    返回字符串的长度。

    print(string.len("hello lua")) -->output  9
    2.2 string.find(s, p [, init [, plain]])    

    匹配字符串,查找开始和结束位置

    s为母字符串

    p为子字符串

    init默认为1,从开始查找;如果为负数,则从string.len(s)+init处开始向右查找

    plain默认false,如果为true,将视p为一个字符串

    print(string.find("abc cba","ab"))
    print(string.find("abc cba","ab",2))
    --从索引为2的位置开始匹配字符串:ab
    print(string.find("abc cba","ba",-1))   --从索引为7的位置开始匹配字符串:ba
    print(string.find("abc cba","ba",-3))   --从索引为6的位置开始匹配字符串:ba
    print(string.find("abc cba", "(%a+)",1))--从索引为1处匹配最长连续且只含字母的字符串
    print(string.find("abc cba", "(%a+)",1,true)) --从索引为1的位置开始匹配字符串:(%a+)
    
    -->output
    1    2
    nil
    nil
    6    7
    1    3    abc
    nil
    2.3 string.format(formatstring, ···)

    格式化字符串

    formatstring由字符'%'加上一个字母组成,这些字母指定了如何格式化参数,例如'd'用于十进制数、'x'用于十六进制数、'o'用于八进制数、'f'用于浮点数、's'用于字符串等。在字符'%'和字母之间可以再指定一些其他选项,用于控制格式的细节。

    print(string.format("%.4f", 3.1415926))   --保留4位小数
    print(string.format("%d %x %o", 31, 31, 31))--十进制数31转换成不同进制
    d = 29; m = 7; y = 2015                  --一行包含几个语句,用;分开
    print(string.format("%s %02d/%02d/%d", "today is:", d, m, y))
    
    -->output
    3.1416
    31 1f 37
    today is: 29/07/2015
    2.4 string.match(s, p [, init])

    匹配字符串,返回字符串形式,与find方法功能相似,返回结果不同

    若匹配成功,则返回目标字符串中与模式匹配的子串;否则返回nil。

    print(string.match("hello lua", "lua"))
    print(string.match("lua lua", "lua", 2))  --匹配后面那个lua
    print(string.match("lua lua", "hello"))
    print(string.match("today is 27/7/2015", "%d+/%d+/%d+"))
    
    -->output
    lua
    lua
    nil
    27/7/2015
    2.5 string.gmatch(s, p)

    match方法的升级版,通过遍历返回匹配的所有字符串

    s = "hello world from Lua"
    for w in string.gmatch(s, "%a+") do  --匹配最长连续且只含字母的字符串
        print(w)
    end
    
    -->output
    hello
    world
    from
    Lua
    
    t = {}
    s = "from=world, to=Lua"
    for k, v in string.gmatch(s, "(%a+)=(%a+)") do  --匹配两个最长连续且只含字母的
        t[k] = v                                    --字符串,它们之间用等号连接
    end
    for k, v in pairs(t) do
    print (k,v)
    end
    
    -->output
    to      Lua
    from    world
    2.6 string.sub(s, i [, j])

    根据位置截取字符串

    print(string.sub("Hello Lua", 4, 7))
    print(string.sub("Hello Lua", 2))
    print(string.sub("Hello Lua", 2, 1)) --看到返回什么了吗
    print(string.sub("Hello Lua", -3, -1))
    
    -->output
    lo L
    ello Lua
             --返回空字符串
    Lua
    2.7 string.gsub(s, p, r [, n])

    替换字符串

    将目标字符串s中所有的子串p替换成字符串r。可选参数n,表示限制替换次数。返回值有两个,第一个是被替换后的字符串,第二个是替换了多少次。

    print(string.gsub("Lua Lua Lua", "Lua", "hello"))
    print(string.gsub("Lua Lua Lua", "Lua", "hello", 2)) --指明第四个参数
    
    -->output
    hello hello hello   3
    hello hello Lua     2

    3、日期时间函数

    3.1 os.time ([table])
    --地点为北京
    print(os.time())    -->output  1438243393
    
    --如果参数为table,那么table中必须含有year、month、day字段。其他字缺省时段默认为中午(12:00:00)
    a = { year = 1970, month = 1, day = 1, hour = 8, min = 1 }
    print(os.time(a))   -->output  60
    3.2 os.difftime (t2, t1)

    返回t1到t2的时间差,单位为秒。

    local day1 = { year = 2015, month = 7, day = 30 }
    local t1 = os.time(day1)
    
    local day2 = { year = 2015, month = 7, day = 31 }
    local t2 = os.time(day2)
    print(os.difftime(t2, t1))   -->output  86400
  • 相关阅读:
    10.2 处理大集合
    观察者模式——出版者与订阅者
    phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
    另一鲜为人知的单例写法-ThreadLocal
    Spring MVC中Controller如何将数据返回给页面
    IntelliJ IDEA安装主题详细步骤
    oracle导出dmp文件的2种方法
    Oracle导出表(即DMP文件)的两种方法
    Spring MVC 实现文件的上传和下载
    压力测试 JMeter3.3
  • 原文地址:https://www.cnblogs.com/wangzhisdu/p/7771219.html
Copyright © 2011-2022 走看看