Lua比较运算符(通配符?)

我是 Lua 的新手,目前正在学习操作符部分。 Lua 中是否有适用于字符串的通配符?

我来自 PHP 的背景,实际上我正在尝试编写以下代码:

--扫描目录中的文件
for file in lfs.dir(doc_path) do

     --> 寻找以 .jpg 结尾的任何文件
     if file is like ".jpg" then
        --扫描到任何以 .JPG 结尾的文件时执行某些操作
     end

end

您会发现,我正在寻找 JPG 文件,同时我正在循环遍历目录中的文件。 我习惯使用百分号或星号字符来搜索字符串。 但也许 Lua 有一种不同的方法?

此外,我完全是在猜测语句:"if file is like......."

点赞
用户68204
用户68204

你需要使用函数string.match(),它会检测一个字符串是否与一个模式匹配。

这是我重写的示例代码(未经测试):

--扫描目录下的文件
for file in lfs.dir(doc_path) do

     --> 查找以“.jpg”结尾的文件
     if file:match "%.jpg$" then
       --如果扫描到以”.JPG“结尾的文件则执行某些操作
     end

end

表示 file:match "%.jpg%" 会调用 string.match 函数,使用方法调用语法糖。这个语法是有效的,因为默认情况下所有字符串都将其元表设置为 string。为简化表达,我还删除了仅有的参数周围的括号。

这个模式使用 $ 在字符串的结尾上锚定,通过使用 % 对其进行引用来测试一个任意的 . 。但是,由于模式是大小写敏感的,所以这只匹配后缀全是小写字母的文件。

要使其大小写不敏感,最简单的方法是在测试之前将文件名折叠为小写,即使用 file:lower:match"%.jpg$",这将在调用match之前调用string.lower()。另外一种方法就是将模式重写为"%.[Jj][Pp][Gg]$",来匹配每个字符的任意一种大小写形式。

2012-07-20 23:58:35