首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Lua string.match不能捕获控制字符

Lua string.match函数是Lua编程语言中的一个字符串匹配函数,用于在一个字符串中查找符合指定模式的子串。它的语法为:

string.match(s, pattern)

其中,s是要进行匹配的字符串,pattern是一个模式字符串,用于描述要匹配的子串的规则。

然而,Lua的string.match函数默认情况下是不能捕获控制字符的。控制字符是ASCII码表中的一些特殊字符,如换行符、制表符等。这是因为Lua的string.match函数默认使用的是简单模式匹配,不支持捕获控制字符。

如果需要捕获控制字符,可以使用Lua的模式修饰符"%c"来匹配控制字符。例如,要匹配换行符,可以使用"%c"模式修饰符,即"\n"。示例代码如下:

local str = "Hello\nWorld" local pattern = "(%c+)" local match = string.match(str, pattern) print(match)

上述代码中,我们使用"%c"模式修饰符来匹配换行符,然后使用string.match函数进行匹配,并将匹配结果打印出来。

需要注意的是,Lua的string.match函数只会返回第一个匹配到的子串。如果需要匹配所有符合条件的子串,可以使用string.gmatch函数。

总结一下,Lua的string.match函数默认情况下不能捕获控制字符,但可以通过使用"%c"模式修饰符来匹配控制字符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Lua模式匹配

请注意,如果没有第3个参数,是不能传入第4个可选参数的。 函数string.match 由于函数string.match也用于在一个字符串搜索模式,因此它与函数string.find非常相似。...不过,函数string.match返回的是目标字符串中与模式相匹配的那部分子串,而非该模式所在的位置: print(string.match("hello world","hello")) --...任意字符 %a 字母 %c 控制字符 %d 数字 %g 除空格外的可打印字符...与其他系统不同的是,Lua语言中的修饰符只能作用于一个字符模式,而无法作用于一组分类。例如,我们不能写出匹配一个可选的单词的模式。通常,可以使用一些高级技巧来绕开这个限制。...对于具有捕获的模式,函数string.match会将所有捕获到的值作为单独的结果返回;换句话说,该函数将字符串切分成多个被捕获的部分: pair = "name = Anna" key,value =

2K40
  • Lua中正则表达式的使用整理

    原文链接:https://blog.csdn.net/fightsyj/article/details/83615498 在Lua中使用正则表达式进行模式匹配的...(str, pattern[, init]) string.gmatch(str, pattern) 这几个函数的使用方法在前面Lua中string常用api用法整理已经介绍过了,这里就不赘述了!...在Lua中进行模式匹配的时候支持的字符类如下: Lua正则表达式 元字符 描述 备注 %a 匹配字母,无论大小写 %b 匹配对称字符,一般写法为"%bxy",x为开始匹配字符,y为结束匹配字符,xy...可随意指定 例如:"%b"为匹配包括在内的所有字符 %c 匹配控制字符 例如:换行符\n、制表符\t等 %d 匹配数字0-9 %l 匹配小写字母a-z %p 匹配标点符号 %s 匹配空白符号...print(string.match("abc100", "[+-]?%d+")) -- 100 print(string.match("abc-100", "[+-]?

    14.5K30

    H7-TOOL的LUA小程序教程第2期:变量,循环,函数,条件语句和字符串相关API

    LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用...TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。 掌握这些基础就够用了。...把nil,false视为假,其他都为true 4.Lua中的变量全是全局变量,除非用 local 显式声明为局部变量 5....' --由于没有捕获,返回全部匹配 --结果:http://www.armfly.com res = string.match(s,'http://%a+....%a+.com') --如果有捕获,则分别返回捕获结果 --结果:www armfly res1,res2 = string.match(s,'http://(%a+).

    1.1K30

    Lua模式匹配

    实际的用例如下: s = "hello world from Lua" for w in string.gmatch(s, "%a+") do  print(w) end 这里是一个捕获并将配对字符分别存到不同变量的例子...如果该配对包含任何捕获信息, 则以编号为1号的捕获作为key值进行查找. 当repl为函数时, 每个成功配对的子字符串均会作为参数被传入到该函数中去....(str, pattern, init) string.match()只寻找源字串str中的第一个配对....在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串....与其他系统的模式不同的是,Lua中的修饰符不能用字符类;不能将模式分组然后使用修饰符作用这个分组。比如,没有一个模式可以匹配一个可选的单词(除非这个单词只有一个字母)。

    1.8K30

    Lua 基础

    保留关键字不能作为常量或变量或其他用户自定义标示符: and 、break 、 do 、 else 、 elseif 、end、false 、for 、 function 、if 、in 、 local...Lua 变量 Lua 变量有三种类型:全局变量、局部变量、表中的域。 Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。...string.match(str, pattern, init) string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。...在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。...Lua table 使用关联型数组,可以用任意类型的值来作数组的索引,但这个值不能是 nil。 Lua table 是不固定大小的,可以根据自己需要进行扩容。

    2.2K00

    Lua 语法基础 | Nmap 脚本

    一些词法规范 标识符(或名称)规范:任意字母、数字、下划线组成,不能以数字开头 一般 下划线+大写字母 被用作特殊用途,尽量咱们就不要用 下划线+小写字母 被用作哑变量(Dummy variable...) 还有一些保留字,不能被设置为标识符 and break do else elseif end false goto for function if in local nil not or repeat...任意字符 %a 字母 %c 控制字符 %d 数字 %g 除空格外的可打印字符 %l 小写字母 %p 标点符号 %s 空白字符 %u 大写字母 %w 字母和数字 %x 十六进制数字 魔法字符 + 重复一次或多次...12.3 错误 Lua 语言作为一种嵌入式语言,每次产生错误不能把程序停下来,所以Lua的错误必须处理 我们可以使用 error 函数来传入一个错误信息 ------------------------...代码中处理错误,那么应该使用函数 pcall来封装代码 想要捕获执行中发生的所有错误,那么首先需要将这段代码进行封装到一个函数中,这个函数通常是一个匿名函数,之后通过pcall来调用这个函数 ----

    2K50

    ES10新特性(一)

    带字符串参数的 String.match 仅返回第一个匹配: let string = 'Hello';let matches = string.match('l');console.log(matches...= string.match(/l/);console.log(matches[0]); // "l"添加 /g 混合let string = "Hello";let ret = string.match...正则表达式捕获组 在 regex 中捕获组只是从 () 括号中提取一个模式,可以使用 /regex/.exec(string) 和string.match 捕捉组。...使用 .matchAll() 的好理由 在与捕获组一起使用时,它可以更加优雅,捕获组只是使用 () 提取模式的正则表达式的一部分。 它返回一个迭代器而不是一个数组,迭代器本身是有用的。...使用 RegEx 对象创建的正则表达式不能使用点 (.) 操作符链接。 - 高级: RegEx 对象更改跟踪最后匹配位置的内部 .lastindex 属性,这在复杂的情况下会造成严重破坏。

    1K30

    try..catch 不能捕获的错误有哪些?注意事项又有哪些?

    try块包含我们需要检查的代码 关键字throw用于抛出自定义错误 catch块处理捕获的错误 finally 块是最终结果无论如何,都会执行的一个块,可以在这个块里面做一些需要善后的事情 1.1 try...JS 代码,例如try块中的以下代码在语法上是错误的,但它不会被catch块捕获。...noSuchVariable; // undefined variable }, 1000); } catch (err) { console.log("这里不会被执行"); } 未捕获的...➤ ⓧ Uncaught Error: Error while executing the code 这里注意两件事: 即使从try块抛出错误后,也会执行finally块 如果没有catch块,错误将不能被优雅地处理...,从而导致未捕获的错误 1.4 try..catch..finally 建议使用try...catch块和可选的finally块。

    2.6K20

    JavaScript·JavaScript 正则技巧

    匹配文件名或文件夹名,不能包含一些特殊字符,需要排除字符组 来表示合法字符,且文件名或文件夹名不能为空,至少有一个字符,需要使用量词 +。...、大写字母或小写字母,不能全为数字可以表示如下: const regex = /(?!...Tip3:如果分组后面有量词,则以最后一次捕获的数据为分组。 非捕获括号 之前的例子,括号里的分组或捕获数据,以便后续引用,称之为捕获型分组和捕获型分支。...如果只想使用括号原始功能,可以使用非捕获型括号 (?:p) 和 (?:p1|p2|p3)。...因为捕获分组需要占用内存来存储捕获分组和分支里的数据 独立出确定字符,如 a+ 可以修改为 aa*,后者比前者多确定了字符 a。 提取分支公共部分,如 this|that 修改为 th(:?

    1.5K20

    Lua迭代器和泛型for

    这个迭代函数的主要部分是调用函数string.match,以当前位置作为起始在当前行中搜索一个单词。...函数string.match使用模式’%w+’来匹配一个“单词”,也就是匹配一个或多个字母/数字字符。...如果函数string.match找到了一个单词,它就捕获并返回这个单词及该单词之后的第一个字符位置,迭代函数则更新当前位置并返回该单词;否则,迭代函数读取新的一行,然后重复上述搜索过程。...然后,Lua语言调用iter(t,0),得到1,t[1](除非t[1]已经变成nil)。在第二次迭代中,Lua语言调用iter(t,1),得到2,t[2],依次类推,直至得到第一个为nil的元素。...关于无状态迭代器的另一个有趣的示例是遍历链表的迭代器(链表在Lua语言中并不常见,但有时也需要用到)。

    90340

    【译】ES10功能完全指南 - 还学的动吗?

    String.match, match只返回字符串参数第一个符合匹配的。...'l' 添加 /g String.match使用正则表达式带上 /g标签会返回多个匹配。...正则表达式捕获组 在正则表达式中捕获组只是在 ()括号中提取匹配。你可以从 /regex/.exec(string)和 string.match捕获组。 通常捕获组是在匹配规则中被创建的。...现在我们有足够的背景知识回答这个问题: 最好使用 .matchAll() 使用捕获组时更加优雅。捕获组知识带有提取模式()的正则表达式的一部分。 它返回一个迭代器而不是数组,迭代器本身很有用。...使用 RegExp对象创建的正则表达式不能使用点( .)运算符链接。 **高级: RegEx**对象跟踪最后匹配位置的内部 .lastIndex属性,这可能对复杂案例有破坏性的事情。

    1.4K20

    Nginx利用Lua实现Nginx反向代理proxy_store缓存文件自删除

    但是还是做不到我要的效果,前两天使用lua写了脚本,实现客户访问前端,lua判断文件的创建时间,然后根据设定的时间来自动删除缓存。...nginx 的设置我就不多说了,lua的安装可以参考 《LNMP平滑升级nginx并安装ngx_lua模块教程》  https://www.linuxidc.com/Linux/2018-04/152034....htm lua代码就很简单了。...用户访问前端完毕的时候,自动执行lua脚本,lua首先根据url来获取缓存文件路径,判断文件是否存在。如果存在获取文件的修改时间, 同时判断修改时间和缓存过期时间是否一致,一致的话删除缓存文件。...lfs = require"lfs" local new_att = assert (lfs.attributes(getfile)) local oldTime=new_att.change if(string.match

    60220
    领券