如何在lua正则表达式中匹配此模式以便捕获字符串内部的内容

我正在尝试在下划线之间放置两个星号。

到目前为止,当下划线中只有一个单词时,我成功匹配了该模式,如果在中间有空格,则匹配失败。

如何编写正确的模式以查找下划线之间的单词并在它们之间放置星号?这是我代码的MWE:

function string:add(start, fim, word)
    return self:sub(1,start-1) .. "**" .. word .. "**" .. self:sub(fim+1)
end

regex = "在这个字符串中,我正在放置_许多_单词以测试我是否正确编写了_匹配模式_的代码。"

while regex:find("_(%w+)_") ~= nil do
    start, fim = regex:find("_(%w+)_")
    regex = regex:add(start, fim, regex:match("_(%w+)_"))
end

print(regex)

输出为:

在这个字符串中,我正在放置 **many** 单词以测试我是否正确编写了 代码来 _match模式_

可以看出,在 _match模式_ 中有两个单词和一个空格,因此我的模式 _(%w+)_ 跳过了它。如何也包括它?

点赞
用户7396148
用户7396148

你可以使用 [] 创建一个集合,并定义该集合以允许字母数字字符和空格:

regex:find("_([%w%s]+)_")

下面是一个资源,您可以在其中学习更多有关 lua 模式的内容:

FHUG: 理解 Lua 模式

2020-01-09 05:23:52
用户7504558
用户7504558

你可以在下划线之间找到不包含开头空格的字符:

local str = "在这个字符串中,我放入了_许多_单词,以测试我是否用的是正确的代码匹配模式。"

print(str:gsub("_([^%s].-)_","**%1**"))

-- 找出单词 --
for words in str:gmatch("_([^%s].-)_") do
  print(words)
end
2020-01-09 07:54:52