匹配Lua中的单词或空格

时间:2017-05-21 19:21:33

标签: lua lua-patterns

(抱歉我的英语不好)
我想要做的是在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.findstring.gmatch等等。

1 个答案:

答案 0 :(得分:1)

匹配返回捕获或整个匹配,您的模式不定义那些。 [%s%S]+基本匹配"(space or not space) multiple times more than once" - 一切。 [%s+%S+]是完全错误的,字符类[ ]是一组单个字符成员,它不会以任何其他方式处理字符序列("[cat]"匹配"c"或{ {1}}),也不关心"a"+可能是[%s+%S+]

第一个例子"(a space or plus or not space or plus) single character"可以通过以下方式解决:

'foo', ' ', 'bar'

如果你想要可变数量的捕获,你将需要regex="(%S+)(%s)(%S+)" 迭代器:

gmatch

但是,这不会检测单个空格和几个空格之间的前导空格或区分,您需要将这些检查添加到匹配结果处理中。

Lua标准模式过于简单,如果您需要更复杂的匹配,您可能需要查看lua lpeg库。