2013-02-15 81 views
1

我有两个字符串 - 每串有许多行类似如下:Lua字符串find - 如何用连字符处理字符串?

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

第一个字符串我分成以下字符串:“缺省VLAN”,“|”,“手动” ... 然后,我想在string1中查找string1中的vlanName(“DEFAULT-VLAN”)的ID(“1”)。

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

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

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

谢谢!

+1

我假设在上面的代码中,“ - ”等于0或更多事件?如果您需要匹配连字符,则需要使用%转义它。 – Tebc 2013-02-15 20:56:22

+0

我不想匹配连字符 - 我通常不知道字符串中是否有连字符。我想匹配“1 DEFAULT-VLAN |”在string2中 – mspoerr 2013-02-15 21:13:13

回答

3

Lua并不神奇。所有表达式"%d-%s-" .. vlanName .. "%s-|"所做的是连接一些字符串,产生最终的字符串。它不知道该字符串打算用于什么。只有string.find知道,并且它不会对如何使用它的参数有任何影响。因此,vlanName将被解释为Lua模式。如果你想使用特殊字符,你需要逃避它们。我会建议使用string.gsub。它会是这样的:

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

...任何其他字符,你想逃避。