2016-04-13 3 views
2

Я хочу, чтобы соответствовать многоканальной линииЧто такое многострочный шаблон в Lua?

/add val1::val2 

и работать через этого шаблон

^/add +(.+)::+(.+)$ 

, но не работает в многоканальной линии , например:

/add line1 
line2 
:: 
linexx 
lineYY 

испытанного этот шаблон, но не работает

^/add ([%w%s]*)::([%w%s]*) 
+0

Если использовать режим многострочный с помощью 'S 'флаг –

+0

мой текст:'/добавить line1 line2 :: linexx lineYY' я хочу образец для этого текста первый шаблон работает только для одной линии, не работает для многострочного – john

ответ

3

. соответствует любому персонажу, включая \n. Так как вы не хотите, чтобы соответствовать многостроковых строк, исключает \n в явном виде, то есть, использовать [^\n] заменить .:

^/add +([^\n]+)::+([^\n]+)$ 

Тест:

local str1 = '/add val1::val2' 
local str2 = [[/add line1 
line2 
:: 
linexx 
lineYY]] 

local pattern = '^/add +([^\n]+)::+([^\n]+)$' 

print(str1:match(pattern)) 
print(str2:match(pattern)) 
+0

работал п ine, thanks – john

+0

Я использовал этот '^/add + ([^.] +) :: + ([^.] +) $' и работал, но если в тексте не работает точечный символ, например: '/ add line1 линия2. :: линияxx линияYY' после линия2 есть точка (.) И нет работа, почему? – john

+0

Потому что в скобках '.' интерпретируется как'% .', поэтому '[^.]' Означает все, что не является периодом. Вы хотите использовать '[^ \ n]' like @Yu Hao – DavisDude