2014-10-09 87 views
7
str = "fa, (captured)[asd] asf, 31" 

for word in str:gmatch("\(%a+\)") do 
    print(word) 
end 

嗨!我想在圓括號之間捕捉一個詞。如何在圓括號之間捕獲一個字符串?

我的代碼應該打印「已捕獲」字符串。

lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\(' 

,我得到這個語法錯誤。

當然,我可以找到括號的位置,並使用string.sub功能

但我更喜歡簡單的代碼。

此外,括號給了我一個類似的錯誤。

回答

8

轉義字符在Lua模式是%,不\。因此,使用這樣的:

word=str:match("%((%a+)%)") 

如果你只需要一個匹配,就沒有必要爲gmatch循環。

爲了捕捉在方括號中的字符串中,使用了類似的模式:

word=str:match("%[(%a+)%]") 

如果捕捉串不完全由字母,使用.-代替%a+

4

LHF的答案可能給你你需要什麼,但我想提一個選擇,我覺得利用不足,可能會爲你工作爲好。使用%((%a+)%)一個問題是,它並不適用於嵌套的括號工作:如果你把它應用到像「(文本(更多)文本)」,你會得到「更多」,即使你可能期待「的文字(以上)的文本」。需要注意的是,你不能問到比賽進行到第右括號(%(([^%)]+)%))修復它,因爲它會給你「的文本(更多」。

但是,您可以使用%bxy pattern item,平衡xy事件和意志在這種情況下返回(text(more)text)(你需要使用類似(%b())捕捉到它)。同樣,這可能是矯枉過正的情況,但有用牢記並可以幫助別人誰碰到這個問題就來了。

+1

+1,這是我的原始答案。:) – lhf 2014-10-09 20:21:20

+0

感謝您提供其他信息。而你的Lua IDE非常棒! – 2014-10-10 13:00:24

相關問題