2016-04-13 10 views
2

Ich magWas ist Multilinienmuster in Lua?

/add val1::val2 

mehrere Leitungen entsprechen und

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

über dieses Muster arbeiten, aber nicht in mehreren Leitungen zum Beispiel arbeiten:

/add line1 
line2 
:: 
linexx 
lineYY 

dieses Muster getestet, aber nicht

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

Sollte die mehrzeiligen Modus 's verwenden 'Flagge –

+0

mein Text ist:'/line1 line2 :: linexx lineYY' i Muster wollen für diesen Text erste Muster hinzufügen nur für eine Zeile arbeiten, nicht arbeiten für mehrzeilige – john

Antwort

3

. entspricht einem beliebigen Zeichen, einschließlich \n. Da Sie wollen mehrzeiligen Strings nicht übereinstimmen, ausschließen \n explizit, dh verwenden [^\n]. zu ersetzen:

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

Test:

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

f gearbeitet ine, danke – john

+0

Ich habe diese '^/add + ([^.] +) :: + ([^.] +) $' und funktioniert, aber wenn im Text Punkt Zeichen nicht funktionieren, zum Beispiel: '/ add line1 line2. :: linexx lineYY 'nach Zeile2 haben Punkt (.) Und nicht funktionieren, warum? – john

+0

Da innerhalb der Klammern das '.' als'% .' interpretiert wird, bedeutet '[^.]' Alles, was kein Punkt ist. Du willst '[^ \ n]' wie @Yu Hao benutzen – DavisDude