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