2013-02-15 183 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") 

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