1

我有两个字符串 - 每个字符串都有很多行,如下所示:

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

我将第一个字符串拆分为以下字符串:“DEFAULT-VLAN”、“|”、“Manual”... 然后我想在 string2 中查找 ID(“1”)以获得 vlanName(“DEFAULT-VLAN” ) 来自字符串 1。

我使用此代码来查找正确的子字符串:

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

但是 vpos1 和 vpos2 为零;当从 vlanName 中删除连字符(“-”)时,它正在工作。
Lua 不应该注意转义此类字符串中的特殊字符吗?字符串从我的 C++ 应用程序移交给 Lua,可能有很多特殊字符。
有没有简单的方法来解决这个问题?

谢谢!

4

1 回答 1

4

Lua 不是魔法。表达式"%d-%s-" .. vlanName .. "%s-|"所做的只是连接一些字符串,生成最终字符串。它不知道该字符串的用途。只string.find知道这一点,并且它不会对如何使用它给出的参数产生任何影响。

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

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

...您想逃脱的其他角色在哪里。

于 2013-02-15T21:23:47.073 回答