这个问题不问Lua模式是否是PCRE。这个问题已经问了好几次了,答案肯定是否定的。
相反,我要问的是,Lua模式是否与正规语言的定义有相似之处。我的本能是否定的,因为我无法为这种常规语言创造一个模式:
L = {'foo'}* = {'', 'foo', 'foofoo', 'foofoofoo', ...}
我所有的尝试都失败了,因为Lua似乎缺乏在拍摄中使用Kleene Star的能力:
> print(('foofoo'):find('(foo)*'))
nil
您能显示出在Lua中没有可以表示L
的模式,而且更普遍地说,可以为任何常规语言创建Lua模式吗?
发布于 2016-06-05 02:39:45
Lua模式不是常规语言。几乎每个Lua模式都可以表示为正则语言,但是有许多正则表达式不能表示为Lua模式(至少有一个不是正则的Lua模式)。而你想要做的特定的常规构造,匹配特定字符序列的重复,是不可能的。一般情况下不行。
基本上,Lua模式不能做任何需要基于输入流中多个字符的决策点的操作。普通语言可以。
发布于 2016-06-05 07:44:27
Kleene Star可以很容易地实现:
function belongs_to_L(str)
return str:gsub("foo", "") == ""
end
print(belongs_to_L("foofoo")) --> true
print(belongs_to_L("bar")) --> false
https://stackoverflow.com/questions/37637861
复制相似问题