首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从正则语言派生正则表达式

从正则语言派生正则表达式
EN

Stack Overflow用户
提问于 2010-03-25 04:53:27
回答 2查看 5.8K关注 0票数 2

给定下面的语言,我如何找到该语言的正则表达式

L= {a ^n b ^m |n =>1,m=>1,nm =>3}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-25 05:14:48

对于以下各项,n>=1、m>=1和nm>=3均为真:

n=1,m>=3

n>=3,m=1

n>=2,m>=2

所以L={ abbb,abbbb,abbbb,... }U{ aaab,aaaab,aaaaab,... }U{ a^n b^m | n>=2,m>=2 }

此正则表达式应等于L:

((abbb(b*)) | (aaa(a*)b) |(aa(a*)bb(b*)

可能有一个比这个更简洁的答案。

票数 5
EN

Stack Overflow用户

发布于 2010-03-25 05:39:09

写下一组该语言的例词。感受一下它们。寻找模式。查找常见的前缀/后缀/子字符串。

代码语言:javascript
复制
abbb
abbbb
abbbbb
aabb
aabbb
aabbbb
aaab
aaabb
aaabbb
aaaab
aaaabb
aaaabbb

例如:请注意,所有单词都以a开头,以b结尾。因此,您的正则表达式看起来类似于a...b...部件是什么样子的?

代码语言:javascript
复制
bb
bbb
bbbb
ab
abb
abbb
aa
aab
aabb
aaa
aaab
aaabb

这看起来像是一个a后跟至少一个a,或者一个b后面可能跟零个或多个b,或者仅仅是一系列两个以上的b

代码语言:javascript
复制
a(a+|b)b*|b{2,}

你也可以说它是至少两个a的序列,或者是至少两个b的序列,或者是a后面跟着b的序列,我不会写下这个表达式。

毕竟,这是家庭作业,所以我会把它留给你去整理,并把它和第一个结果放在一起。(顺便说一下:我使用的所有快捷键都只是语法上的糖,它们不会使正则表达式更强大。也就是说,有一个简单的语法转换,可以将它们转换为标准的正则表达式。)

我只希望我是对的,不要让自己出丑:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2511313

复制
相关文章

相似问题

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