匹配 Lua 中的单词或空格
Match a word or whitespaces in Lua
(抱歉我的英语不好)
我想要做的是在 Lua.
例如:
local my_string = "foo bar"
my_string:match(regex) --> should return 'foo', ' ', 'bar'
my_string = " 123!@." -- note: three whitespaces before '123!@.'
my_string:match(regex) --> should return ' ', ' ', ' ', '123!@.'
其中 regex
是我要的 Lua 正则表达式模式。
当然,我对 Google 做了一些研究,但我找不到任何有用的东西。到目前为止我得到的是 [%s%S]+
和 [%s+%S+]
但它似乎不起作用。
任何使用标准库的解决方案,例如string.find
、string.gmatch
等都可以。
匹配 returns 捕获或整个匹配,您的模式没有定义这些。 [%s%S]+
匹配 "(space or not space) multiple times more than once"
,基本上 - 一切。 [%s+%S+]
完全错误,字符 class [ ]
是一组单个字符成员,它不会以任何其他方式处理字符序列("[cat]"
匹配 "c"
或 "a"
),也不关心 +
。 [%s+%S+]
可能是 "(a space or plus or not space or plus) single character"
第一个例子 'foo', ' ', 'bar'
可以通过以下方式解决:
regex="(%S+)(%s)(%S+)"
如果您想要可变数量的捕获,您将需要 gmatch
迭代器:
local capt={}
for q,w,e in my_string:gmatch("(%s*)(%S+)(%s*)") do
if q and #q>0 then
table.insert(capt,q)
end
table.insert(capt,w)
if e and #e>0 then
table.insert(capt,e)
end
end
然而,这不会检测前导 space 或区分单个 space 和多个,您需要将这些检查添加到匹配结果处理中。
Lua 标准模式很简单,如果你需要更复杂的匹配,你可能想看看 lua lpeg 库。
(抱歉我的英语不好)
我想要做的是在 Lua.
例如:
local my_string = "foo bar"
my_string:match(regex) --> should return 'foo', ' ', 'bar'
my_string = " 123!@." -- note: three whitespaces before '123!@.'
my_string:match(regex) --> should return ' ', ' ', ' ', '123!@.'
其中 regex
是我要的 Lua 正则表达式模式。
当然,我对 Google 做了一些研究,但我找不到任何有用的东西。到目前为止我得到的是 [%s%S]+
和 [%s+%S+]
但它似乎不起作用。
任何使用标准库的解决方案,例如string.find
、string.gmatch
等都可以。
匹配 returns 捕获或整个匹配,您的模式没有定义这些。 [%s%S]+
匹配 "(space or not space) multiple times more than once"
,基本上 - 一切。 [%s+%S+]
完全错误,字符 class [ ]
是一组单个字符成员,它不会以任何其他方式处理字符序列("[cat]"
匹配 "c"
或 "a"
),也不关心 +
。 [%s+%S+]
可能是 "(a space or plus or not space or plus) single character"
第一个例子 'foo', ' ', 'bar'
可以通过以下方式解决:
regex="(%S+)(%s)(%S+)"
如果您想要可变数量的捕获,您将需要 gmatch
迭代器:
local capt={}
for q,w,e in my_string:gmatch("(%s*)(%S+)(%s*)") do
if q and #q>0 then
table.insert(capt,q)
end
table.insert(capt,w)
if e and #e>0 then
table.insert(capt,e)
end
end
然而,这不会检测前导 space 或区分单个 space 和多个,您需要将这些检查添加到匹配结果处理中。
Lua 标准模式很简单,如果你需要更复杂的匹配,你可能想看看 lua lpeg 库。