2012-04-14 39 views
2

英語不是我的母語,所以描述這個問題有點難。
我想通過lua string.gsub()獲得'd = 40'的str,但是有一些問題。
Lua string.gsub()由'%s'或' n'模式

------下面代碼---
本地STR = [== [
- A = 10
- -b = 20
--c = 30
d = 40
] ==]

本地PAT1 = [= [%S [%S]] =]
本地PAT2 = [= [\ N [%S]] =]
str:gsub(pat2,function(s)print(「pat1 >>」.. s)end)--pat1 >> d = 40
str:gsub(pat2,function(s)print(「pat2 < <」 ..多個)端)--not匹配

本地RE1,_ = STR:GSUB( 「\ n」, 「$」)
本地RE2,_ = STR:GSUB( 「%S」,」 $「)
print(re1)--a = 10 $ - -b = 20 $ --c = 30 $ d = 40 $
print(re2) - $ a = 10 $ - $ - b = 20 $$ - c = 30 $ d = 40 $

作爲Lua 5.1參考手冊說
%s:表示所有空格字符。
我認爲它等於'\ n',''和'\ t'。

問題:爲什麼pat2不能匹配?
但我認爲pat2是正確的,有'\ n'befor'd = 40',
所以我認爲它可以匹配,但它不能工作,爲什麼?

回答

3

當您對字符串使用[[]]表示法時,這是一種特殊的字符串字面值,它完全按照您提供的字符串採用該字符串。沒有字符轉義完成。您可以在括號中放入一些=字符,以便讓您更容易地使用[字符串中的字符。

字符串文字"\n"是一個字符,代表換行符。這是因爲使用轉義字符\。應用於'n'字符的轉義字符表示「換行符」。

字符串文字[[\n]]正是它所說的:字符'\'後面跟着字符'n'。由於沒有逃脫,\n沒有被專門處理。這正是它的樣子。

因此,當你說local pat2 = [=[\n[%s]]=]你說「的第一個字符應該是‘\’後面加一個空格‘N’這不是你想要的東西;你逸出的工作所以你應使用常規字符串文字:local pat2 = "\n[%s]"

+0

這是工作,thx – yftx 2012-09-20 14:51:50