Как сопоставить этот шаблон в регулярном выражении lua, чтобы он мог поймать, что находится внутри строки - PullRequest
2 голосов
/ 09 января 2020

Я пытаюсь поставить две звездочки между словами, которые заключены в подчеркивание.

До сих пор мне удалось сопоставить шаблон, когда в подчеркивании есть только одно слово, если в середине есть пробел, шаблон не работает.

Как мне написать правильный шаблон, чтобы найти слова между подчеркиванием и поставить звездочки между ними? Вот 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+)_ пропускает его. Как мне это тоже включить?

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вы можете просто найти символы между подчеркиванием, исключая пробел в начале:

local str = "In this string I'm putting _many_ words to test if I _wrote_ the code right to _match patterns_."

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

-- find the words --
for words in str:gmatch("_([^%s].-)_") do
  print(words)
end
1 голос
/ 09 января 2020

Вы можете создать набор с помощью [] и определить этот набор, чтобы разрешить alphanumeri c символов и пробелов:

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

Вот ресурс, где вы можете узнать больше о lua шаблонах :

FHUG: Понимание Lua Шаблоны

...