Пожалуйста, изучите этот вопрос Pattern ^u.meta(\.|$) not working as expected, который имеет ожидаемое поведение, которое мне нужно.способ установки динамического шаблона соответствия
МЕНЯЕТ
В шаблоне ^u.meta(\.|$)
или в Lua '^u%.meta%f[\0.]'
или '^u%.meta%f[%z.]'
, изменение мне нужно u.meta
может быть все, что определяется пользователем с переменной. И шаблон должен быть общим/динамическим, чтобы соответствовать тому, что установлено в переменной.
Например:
-- should return 'u.meta', and pattern should match
local pattern = 'u.meta'
print(string.match("u.meta.admin", '^u%.meta%f[\0.]')) -- u.meta
-- should return 'nil', and pattern should fail
local pattern = 'u.meta'
print(string.match("u.domain.admin", '^u%.meta%f[\0.]')) -- nil
-- should return 'anything.anything', and pattern should match
local pattern = 'anything.anything'
print(string.match("anything.anything.something", '^anything%.anything%f[\0.]') -- anything.anything
-- should return nil, and pattern should fail
local pattern = 'anything.anything'
print(string.match("fake.fake.something", '^anything%.anything%f[\0.]') -- nil
РЕШЕНИЕ 1
так, что я думал, что-то вроде interpolation
в Lua модели, если это возможно.
"^#{pattern}%f[\0.]"
РАБОЧИЙ РАСТВОР 2
Я сделал работу с помощью метода. Но все же я должен называть этот шаблон вручную. Если мы сможем это исправить с самим шаблона, было бы здорово
Пример:
function pattern_matcher(v, pattern) return string.match(v, pattern) end
print(pattern_matcher("fake.fake.something", '^u%.meta%f[%z.]')) -- nil
print(pattern_matcher("u.meta.something", '^u%.meta%f[%z.]')) -- u.meta
print(pattern_matcher("u.meta_something", '^u%.meta%f[%z.]')) -- nil
print(pattern_matcher("u.meta-something", '^u%.meta%f[%z.]')) -- nil
Просто избегайте волшебных символов. – moteus
My Bad, мое решение «2» работает, теперь, если мы сможем заставить это работать с самим шаблоном, тогда было бы здорово. Я также обновляю свой вопрос :) – przbadu
Пожалуйста, проверьте [это демо] (https://ideone.com/CEwFEY). –