美文网首页程序员lua
Lua string.match()

Lua string.match()

作者: AlbertS | 来源:发表于2016-08-16 19:44 被阅读15417次
    字符匹配.jpg

    前言#

    今天我们再一起看一个string家族的匹配函数,它不同于函数string.find()要返回匹配字符的索引,也不同于string.gmatch()函数会返回一个迭代函数可以取到所有的匹配项,这个函数它仅仅范回第一个匹配,简单易用,往往在一些实际应用中找到第一个匹配就够了,我们一起来看一下用法。


    string.match()##

    • 原型:string.match(s, pattern [, init])
    • 解释:在字符串s中查找满足参数pattern的匹配子串,如果找到了一个匹配就返回这个匹配子串,若没找到则返回nil,如果参数pattern没有指定匹配参数,则返回整个匹配字符串——"If pattern specifies no captures, then the whole match is returned."(这一句我翻译的不太靠谱啊,有问题麻烦大家给我指正一下),另外,一个数字形参数init用来指定查找字符串的其实位置,这个参数默认为1,当然也可以设置为负数,即-n表示从字符串尾部向前数n个字符开始查找。

    Usage##

    • 首先新建一个文件将文件命名为matchtest.lua然后编写如下代码:
    local sourcestr = "ehre99wj=--=-*-/4mdqwl\0ds123fef"
    print("\nsourcestr = "..sourcestr)
    
    local match_ret = string.match(sourcestr, "%d%d%d")
    print("\nmatch_ret is "..match_ret)
    
    match_ret = string.match(sourcestr, "%d%a%a")
    print("\nmatch_ret is "..match_ret)
    
    match_ret = string.match(sourcestr, "")
    print("\nmatch_ret is "..match_ret)
    
    match_ret = string.match(sourcestr, "%d%d")
    print("\nmatch_ret is "..match_ret)
    
    match_ret = string.match(sourcestr, "%d%d", 10)
    print("\nmatch_ret is "..match_ret)
    
    • 运行结果
    string_match.png

    总结#

    • 由第一组结果可以看出string.match()在遇到\0时不会停止查找,而是一直查找到字符串结尾。
    • 最后两组结果对比可以发现参数init的作用,他指定了搜索匹配的起始位置。
    • 这一篇中有一个关于官方文档的翻译的疑惑,就是"If pattern specifies no captures, then the whole match is returned.",我总感觉我怎么翻译都不太对,麻烦明白的大神给我讲一下是什么意思,其实给我举个例子就明白了。

    相关文章

      网友评论

        本文标题:Lua string.match()

        本文链接:https://www.haomeiwen.com/subject/szwpsttx.html