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

почему этот код:

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

ничего не дает??

Как узнать, содержит ли одна строка другую (с пробелами или другими символами, такими как «-» или «()»)?


person user8594105    schedule 10.03.2019    source источник
comment
Либо замените 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   -  person Egor Skriptunoff    schedule 10.03.2019


Ответы (1)


"PS02 - " работает, похоже, работает, потому что на самом деле соответствует только подстроке "PS02 ". Это связано с тем, что - в (space)- означает «совпадение (пробел) ноль или более раз, но как можно меньше раз».

Каждый магический символ ^$()%.[]*+-? должен иметь префикс (экранированный) с начальным %..., поэтому правильными шаблонами в каждом из приведенных выше случаев являются "PS02 %- " и "PS02 %- F".

person Michael - sqlbot    schedule 10.03.2019
comment
Это будет сложно для нас, людей, пришедших с других языков (здесь perl). Паттерны Lua — это не регулярные выражения, на которых мы выросли. - person glenn jackman; 13.03.2019