2012-04-14 1 views
2

Английский не мой родной язык, поэтому немного сложно описать вопрос.
Я хочу получить 'd = 40' в str по lua string.gsub(), но есть некоторые проблемы.
Lua string.gsub() по шаблону '% s' или ' n'

------ ниже код ---
локальная ул = [== [
- а = 10
- -b = 20
-С = 30
д = 40
] ==]

местного pat1 = [= [% s [% s]] =]
локальная pat2 = [= [\ п [% s]] =]
str: gsub (pat1, function (s) print ("pat1 >>" .. s) end) --pat1 >> d = 40
str: gsub (pat2, function (s) print ("pat2 < <" .. s) конец) --not матч

местный RE1, _ = ул: GSUB ("\ п", "$")
местный re2, _ = ул: GSUB ("% s",» $ ")
print (re1) --a = 10 $ - -b = 20 $ --c = 30 $ d = 40 $
print (re2) - $ a = 10 $ - $ - b = 20 $$ = 30-C $ d = 40 $

В Lua 5.1 Справочное руководство Say
% s: представляет все пробельные символы.
Я думаю, что он равен '\ n', '' и '\ t'.

Вопрос: Почему pat2 не может совпадать?
Но я думаю, что pat2 прав, есть «\ n'befor'd = 40»,
, поэтому я думаю, что он может совпадать, но он не может работать, почему?

ответ

3

Когда вы используете нотацию для строк , это специальный строковый литерал, который берет строку точно так же, как вы ее предоставляете. Выполнение символа не выполняется. Вы можете поместить некоторое количество символов = в скобки, чтобы было немного легче позволить вам использовать [символы в строке.

Строковый литерал "\n" - это один символ, представляющий новую строку. Это из-за использования escape-символа \. Эквивалентный символ, применяемый к символу «n», означает «символ новой строки».

Строковый литерал [[\n]] - это именно то, что он говорит: символ '\', за которым следует символ 'n'. Потому что никакое escaping сделано, \n не обработан специально. Это как раз то, на что похоже.

Поэтому, когда вы говорите, local pat2 = [=[\n[%s]]=] Вы говорите, что «первый символ должен быть„\“, а затем„п“с последующим пробелом Это не то, что вы хотите,.. Вы хотите отводящей работать, так что вы должен использовать обычный строковый литерал: local pat2 = "\n[%s]".

+0

Это работает, thx – yftx

 Смежные вопросы

  • Нет связанных вопросов^_^