2011-10-09 74 views
2

雖然我已經越來越熟悉Lua中的gsub,但我在這裏感到茫然。有可能有更好的方式來更有效地做到這一點,這就是我正在尋找的。什麼我希望做的是改變:使用string.gsub最有效地將x更改爲y(Lua)

\(port Planes)9e;\(enter pool)n2euw 

port Planes;run 9e;enter pool;run n2euw 

看起來這是一個簡單的事情,但我完全一片空白。我大概可以將這部分歸因於筋疲力盡,但這不是一個真正的藉口。我的方式是:

string.gsub(variable, ";","\(") 
string.gsub(variable, "\(", ";") 
string.gsub(variable, ")",";run") 
string.gsub(variable, ";;",";") 

但對我來說,這看起來很sl,,並不像我想要的那樣高效。如果「)」結束該行,它也會出現問題,並且會放入「;」那裏,這不是我想要的。我會感謝更熟悉Lua的人的專業知識,他們可以整理這些信息並使其更高效。一旦所有事情都說完了,我會把它變成一個功能。謝謝!

編輯:在測試的是,它甚至不工作,反正...我想不出合適的模式匹配序列使用,使其在所有的工作......

+0

有一些原因,「效率」是一個問題? –

+0

更快的代碼編譯,我想。此外,它使未來更容易查看,因此我稍後不會再看它,並說'我在這裏嘗試了什麼?我正在尋找的最終結果只是一種更加整潔的方式;它將會幫助我將來的項目,因爲我仍然在學習Lua。 – Josh

+0

不要忘記字符串是不可變的,所以你需要記住每次調用'string.gsub'的結果:'variable = string.gsub(variable,「;;」,「;」)'。我也會保存一些類型,並將其寫成'variable = variable:gsub(「;;」,「;」)'只要我確定'variable'總是一個'string'。 – RBerteig

回答

2

不知道更多有關可能的組合,你可以有,我不能說,這將在每種情況下工作,但它應該給一個開始:

string.gsub(variable,"\\%((.-)%)","%1;run ") 
string.gsub(variable,";run $","") 

第一GSUB正在恢復您的括號中的命令,去掉括號和在最後添加';運行'。

第二個問題是檢查字符串的結尾是否是'; run',如果是這種情況,則替換它。

你也應該看看這篇文章,圖案很好的總結: http://www.lua.org/pil/20.2.html

+0

這讓事情變得更加整潔。我真的是在上面畫一個空白,我感謝你的回答! – Josh

相關問題