我正在尝试在下划线所包围的单词之间插入两个星号。
到目前为止,当下划线内只有一个单词时,我成功匹配了模式,如果中间有空格,则模式失败。
我如何编写正确的模式以在下划线之间找到单词并在其之间插入星号?这是我的代码的MWE:
function string:add(start, fim, word)
return self:sub(1,start-1) .. "**" .. word .. "**" .. self:sub(fim+1)
end
regex = "In this string I'm putting _many_ words to test if I _wrote_ the code right to _match patterns_."
while regex:find("_(%w+)_") ~= nil do
start, fim = regex:find("_(%w+)_")
regex = regex:add(start, fim, regex:match("_(%w+)_"))
end
print(regex)
输出为:
在此字符串中,我要输入
**many**
个单词以测试我是否**wrote**
_match patterns_
的代码权限。
可以看出,在_match patterns_
中有两个单词和一个空格,因此我的模式_(%w+)_
跳过了它。我如何也包含它?
您可以使用[]
进行设置,并定义该设置以允许使用字母数字字符和空格:
regex:find("_([%w%s]+)_")
这里是您可以了解更多有关lua模式的资源: