【问题标题】:Lua string.gsub() by '%s' or '\n' patternLua string.gsub() by '%s' 或 '\n' 模式
【发布时间】:2012-04-14 18:32:53
【问题描述】:

英语不是我的母语,所以很难描述这个问题。
我想通过 lua string.gsub() 在 str 中获取 'd=40',但是有一些问题。

-----下面的代码---
本地str = [==[
-- a=10
- -b=20
--c=30
d=40
]==]

本地 pat1 = [=[%s[%s]]=]
本地 pat2 = [=[\n[%s]]=]
str:gsub(pat1, function(s) print("pat1>>" .. s) end) --pat1>>d=40
str:gsub(pat2, function(s) print("pat2

本地 re1,_ = str:gsub("\n","$")
本地 re2,_ = str:gsub("%s","$")
打印(re1) --a=10$- -b=20$ --c=30$d=40$
打印(re2) --$a=10$-$-b=20$$ --c=30$d=40$

正如 Lua 5.1 参考手册所说
%s:代表所有空格字符。
我认为它等于 '\n',' 'and'\t'。

问题:为什么 pat2 不能匹配?
但我认为 pat2 是对的,有一个 '\n'befor'd=40' ,
所以我认为它可以匹配,但它不能工作,为什么?

【问题讨论】:

    标签: lua pattern-matching lua-patterns


    【解决方案1】:

    当您对字符串使用[[]] 表示法时,这是一个特殊的字符串文字,它完全按照您提供的方式获取字符串。没有进行字符转义。您可以在括号中放置一些 = 字符,以便更容易让您在字符串中使用 [ 字符。

    字符串文字"\n" 是一个字符,代表换行符。这是因为使用了转义字符\。应用于“n”字符的转义字符表示“换行符”。

    字符串文字[[\n]] 正是它所说的:字符'\' 后跟字符'n'。因为没有进行转义,\n 没有被特殊对待。这正是它的样子。

    因此,当您说 local pat2 = [=[\n[%s]]=] 时,您是在说“第一个字符应该是 '\' 后跟 'n' 后跟一个空格。这不是您想要的;您想要逃避工作。所以你应该使用常规字符串文字:local pat2 = "\n[%s]"

    【讨论】:

      猜你喜欢
      • 2014-11-15
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2015-05-18
      • 2015-03-13
      相关资源
      最近更新 更多