#lua #lua-patterns
#lua #lua-шаблоны
Вопрос:
почему этот код:
p="PS02 - Fretted stereo2stereo (x86)"
s="PS02 - "
if string.match(p,s) then
reaper.ShowConsoleMsg("Yes!")
end
выдает нам «Да!»
Но этот код:
p="PS02 - Fretted stereo2stereo (x86)"
s="PS02 - F"
if string.match(p,s) then
reaper.ShowConsoleMsg("Yes!")
end
нам ничего не дает??
Как узнать, содержит ли какая-либо строка другую (с пробелами или другими символами, такими как «-» или «()»)?
Комментарии:
1. Либо замените
string.match(p,s)
наstring.match(p,(s:gsub("%p", "%%%0")))
, либо заменитеif string.match(p,s) then
наif string.find(p,s,1,true) then
Ответ №1:
"PS02 - "
работает похоже, работает, потому что на самом деле соответствует только подстроке "PS02 "
. Это потому, что -
in (space)-
означает «совпадение (пробел) ноль или более раз, но как можно меньше раз».
У каждого магического символа ^$()%.[]* -?
должен быть префикс (экранированный) с начальным %
… итак, правильными шаблонами в каждом приведенном выше случае являются "PS02 %- "
и "PS02 %- F"
.
Комментарии:
1. Это будет сложно для нас, людей, переходящих с других языков (здесь perl). Шаблоны Lua — это не те регулярные выражения, с которыми мы выросли.