Jin*_*Lee 7 string lua string-matching lua-patterns
str = "fa, (captured)[asd] asf, 31"
for word in str:gmatch("\(%a+\)") do
print(word)
end
Run Code Online (Sandbox Code Playgroud)
嗨!我想在括号中捕捉一个单词.
我的代码应该打印"捕获"字符串.
Run Code Online (Sandbox Code Playgroud)lua: /home/casey/Desktop/test.lua:3: invalid escape sequence near '\('
我得到了这个语法错误.
当然,我可以找到括号的位置并使用string.sub函数
但我更喜欢简单的代码.
另外,括号给了我类似的错误.
lhf*_*lhf 10
Lua模式中的转义字符%不是\.所以使用这个:
word=str:match("%((%a+)%)")
Run Code Online (Sandbox Code Playgroud)
如果您只需要一个匹配,则不需要gmatch循环.
要在方括号中捕获字符串,请使用类似的模式:
word=str:match("%[(%a+)%]")
Run Code Online (Sandbox Code Playgroud)
如果捕获的字符串不完全由字母组成,请使用.-而不是%a+.
lhf 的回答可能会给你你需要的东西,但我想再提一个我觉得没有充分利用的选项,也可能对你有用。使用的一个问题%((%a+)%)是它不适用于嵌套括号:如果将它应用于诸如“(text(more)text)”之类的内容,即使您可能期望“text(more)text ”,您也会得到“more” ”。请注意,您无法通过要求匹配第一个右括号 ( %(([^%)]+)%))来修复它,因为它会给您“文本(更多”)。
但是,您可以使用%bxy模式 item,它可以平衡x和y出现并(text(more)text)在这种情况下返回(您需要使用类似的东西(%b())来捕获它)。同样,这对您的案例来说可能有点矫枉过正,但记住这一点很有用,并且可能会帮助遇到此问题的其他人。
| 归档时间: |
|
| 查看次数: |
4354 次 |
| 最近记录: |