Lua字符串查找 - 如何处理带连字符的字符串?

我有两个字符串 - 每个字符串都有许多类似以下的行:

string1 = "  DEFAULT-VLAN         | Manual     10.1.1.3      255.255.255.0 "
string2 = "  1       DEFAULT-VLAN                     | Port-based No    No"

我把第一个字符串分成了以下字符串:"DEFAULT-VLAN","|","Manual"...然后我想在字符串1中查找vlanName("DEFAULT-VLAN")的ID("1")在字符串2中。

我使用以下代码查找正确的子字符串:

vpos1, vpos2 = vlan:find("%d-%s-" .. vlanName .. "%s-|")

但vpos1和vpos2都是零;当从vlanName中删除连字符(“-”)时,它才起作用。

Lua不应该处理此类字符串中的特殊字符吗?该字符串从我的C++应用程序传递给Lua,可能有很多特殊字符。

有没有简单的方法来解决这个问题?

谢谢!

点赞
用户734069
用户734069

Lua 不是魔法。表达式 "%d-%s-" .. vlanName .. "%s-|" 只是将一些字符串连接起来,生成最终的字符串。它不知道该字符串的用途是什么。只有 string.find 知道,但它对其参数的用法没有任何影响。

所以,是的,vlanName 将被解释为 Lua 模式。如果要使用特殊字符,您需要对它们进行转义。我建议使用 string.gsub。代码如下:

vlanName:gsub("[%-...]", "%%%0")

其中,... 代表您想要转义的其他字符。

2013-02-15 21:23:47