Как узнать, содержит ли строка подстроку со специальными символами?

#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 — это не те регулярные выражения, с которыми мы выросли.