lua中 string.find()方法得不到正确的结果是怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua中 string.find()方法得不到正确的结果是怎么回事相关的知识,希望对你有一定的参考价值。

a,b=string.find("GL31-LWG-LJG-1-BQG-DWG","-1-BQG");
print(a,b);
运行后结果为: 15 18
为什么不是:13 18呢

还有就是:
a,b=string.find("GL31-LWG-LJG-4-BQG-DWG","-4-");
print(a,b);
这段代码运行后结果为: 5 5
为什么不是: 13 15 呢

难道lua中 string.find()方法使用时 — 和 数字 和 字母不一样吗?
哪位高手给解释一下
更多0

参考技术A

那个,在lua中,使用模式匹配时,符号前要加%。

就像这样:


“%d+”  是匹配第一个数字

例如:12345678,5201314

“%d%+” 是匹配一个数字后加一个加号

例如:1+  5+  4+ 



你的那个

a,b=string.find("GL31-LWG-LJG-1-BQG-DWG","-1-BQG");

里有- 号,所以lua的解析会出错

改成

a,b=string.find("GL31-LWG-LJG-1-BQG-DWG","%-1%-BQG");

print(a,b);


就是输出 13 18  了。


具体的去看《lua 程序设计》这部书。

本回答被提问者和网友采纳
参考技术B 主要问题是三个字:没转义。具体内容可以看楼上那个老哥。
知识点提醒:匹配模式下转义用%,非匹配模式用\;在不确定一个符号是否需要转义的时候可以把所有字符都转义掉,这样总不会错,因为就算是不用转义的你加个转义结果也是一样的。

Lua - 使用 string.find 查找句子?

【中文标题】Lua - 使用 string.find 查找句子?【英文标题】:Lua - Using string.find to find a sentence? 【发布时间】:2021-11-02 19:37:07 【问题描述】:

在之前的堆栈溢出响应之后,(here) 我正在尝试检查在我正在运行的 io.popen 命令的响应中是否返回了特定的句子/字符串..

local function DevicePing(ip)
    local handler = io.popen("ping -c 3 " ..ip.. " 2>&1")
    local response = handler:read("*a")
    print(response)
    if string.find(response, "0% packet loss") then
        print ("Pings were all successfull.")
    else
        print ("Pings were all unsuccessfull.")
    end
end

DevicePing("192.168.1.180")

但是每次我运行它,它都找不到请求的字符串/句子;请参阅下面的打印输出..

PING 192.168.1.180 (192.168.1.180): 56 data bytes
64 bytes from 192.168.1.180: seq=0 ttl=64 time=2.983 ms
64 bytes from 192.168.1.180: seq=1 ttl=64 time=1.620 ms
64 bytes from 192.168.1.180: seq=2 ttl=64 time=2.465 ms

--- 192.168.1.180 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 1.620/2.356/2.983 ms
     
Pings were all unsuccessfull.     

我做错了什么,因为它没有看到“0% 丢包”并说它成功了?

【问题讨论】:

不是read("*all")吗? 【参考方案1】:

% 是 Lua 模式中的转义字符。 使用"0%% packet loss" 表示文字%

但是,此模式也将匹配 100% packet loss。我建议", 0%% packet loss"

此外,它不适用于在报告中显示小数的 macOS:0.0% packet loss

【讨论】:

谢谢@lhf 做到了……

以上是关于lua中 string.find()方法得不到正确的结果是怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

lua: function_demo.lua:144: bad argument #2 to 'find' (string expected, got nil

Lua 字符串查找函数 string.find(s, pattern [, init [, plain]] )

Lua自己实现string.split功能

Lua自己实现string.split功能

lua语言的字符串替换函数的使用方法问题。

Lua简单解析xml