首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lua模式能代表任何常规语言吗?

Lua模式能代表任何常规语言吗?
EN

Stack Overflow用户
提问于 2016-06-05 02:25:32
回答 2查看 133关注 0票数 3

这个问题不问Lua模式是否是PCRE。这个问题已经问了好几次了,答案肯定是否定的。

相反,我要问的是,Lua模式是否与正规语言的定义有相似之处。我的本能是否定的,因为我无法为这种常规语言创造一个模式:

代码语言:javascript
运行
复制
L = {'foo'}* = {'', 'foo', 'foofoo', 'foofoofoo', ...}

我所有的尝试都失败了,因为Lua似乎缺乏在拍摄中使用Kleene Star的能力:

代码语言:javascript
运行
复制
> print(('foofoo'):find('(foo)*'))
nil

您能显示出在Lua中没有可以表示L的模式,而且更普遍地说,可以为任何常规语言创建Lua模式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-05 02:39:45

Lua模式不是常规语言。几乎每个Lua模式都可以表示为正则语言,但是有许多正则表达式不能表示为Lua模式(至少有一个不是正则的Lua模式)。而你想要做的特定的常规构造,匹配特定字符序列的重复,是不可能的。一般情况下不行。

基本上,Lua模式不能做任何需要基于输入流中多个字符的决策点的操作。普通语言可以。

票数 1
EN

Stack Overflow用户

发布于 2016-06-05 07:44:27

Kleene Star可以很容易地实现:

代码语言:javascript
运行
复制
function belongs_to_L(str)
   return str:gsub("foo", "") == ""
end

print(belongs_to_L("foofoo"))  --> true
print(belongs_to_L("bar"))     --> false
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37637861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档