问题标签 [kleene-star]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Kleene 是编程界的明星。(a|b)* 和 a*b* 之间的区别?
(a|b)*
和 和有什么不一样a*b*
?您能否展示更多 Kleene 星形和图案的示例?我在 Google 中搜索了很多网站,但它返回的关于这个主题的结果很少。当我试图了解 PHP 正则表达式的工作原理时,我将不胜感激。
concatenation - 如果一个正则语言只包含 Kleene 星,那么它有可能来自两个非常规语言的串联吗?
我想知道,给定一个只包含 Kleene 星号运算符(例如(ab)*)的常规语言 L,是否可以通过连接两种非常规语言来生成 L?我试图证明 L 只能由两种常规语言的连接生成。
谢谢。
regex - 将点星正则表达式转换为 NFA
我正在将一组给定的正则表达式转换为一个 NFA,但我遇到了一些问题。我应该如何转换诸如“ab.*c”之类的正则表达式(表示匹配一个'a'、一个'b'、任意数量的字符,然后是一个'c')?
我的最终目标是将单个 NFA 转换为 DFA(为此我使用了子集构造算法)。
algorithm - 带有克莱恩星的自动机
我正在学习自动机。你能帮我了解一下带 Kleene 闭包的自动机是如何工作的吗?假设我有字母 a、b、c,我需要找到以 Kleene 星号结尾的文本——比如 ab*bac——它将如何工作?
linux - grep:kleene star(*) 什么时候应该匹配自己?
我正在学习grep
atm,但我很难理解 kleene 星元字符的工作原理。手册页描述了*
匹配前一个字符零次或多次。我正在使用一个名为test
以下内容的文件
grep 'a*' test
应该匹配零次或多次出现,a
并且如解释的那样在输出中打印文件的每一行test
。该文档进一步描述了要匹配元字符,例如*
必须通过在它们前面加上反斜杠来进行转义\
。grep '*' test
但是和的输出grep '\*' test
是一样的。输出:*a
为什么*
匹配自身而不在其前面加上\
?
regex - 正则表达式:Kleene 星是否具有可分配性?
(aa)*
和之间会有区别(a*a*)
吗?
有分配属性吗?
regex - 过渡中的歧义:如何在 NFA 中处理字符串?
我已经从给定的正则表达式制作了 DFA 以匹配测试字符串。在某些情况下.*
会发生。(例如.*ab
)。现在假设机器处于状态 1。在 DFA 中, .*
指的是所有字符到自身的转换,以及从状态 1 到“a”的另一个转换。如果测试字符串包含“a”,那么转换可能是什么,因为从状态 1 开始,机器可以进入 DFA 中不可能的两个状态。
regular-language - 无限的语言不能是规则的吗?什么是有限语言?
我在一本关于可计算性的书中读到了这一点:
(Kleene's Theorem) 一种语言是规则的当且仅当它可以通过应用联合、连接、重复有限次数这三个操作从有限语言中获得。
我正在与“有限的语言”作斗争。
考虑这种语言:L = a*
它不是有限的。它{0, a, aa, aaa, ...}
显然是一个无限集(0
=空字符串)。
所以它是一种无限的语言,对吧?也就是说,“无限集”意味着“无限语言”,对吧?
显然,a*
是一种常规语言。它是一种无限的语言。因此,根据 Kleene 定理,它不可能是常规语言。矛盾。
我很困惑。我想我不知道“有限语言”是什么意思。
regex - 如何评估这个正则表达式?
我只是在学习正则表达式,所以我只是想确保我的理解是正确的。
01*
表示 0 后跟 0 次或多次重复 1。
1* + 01*
表示 0 次或多次重复 1 或 0 后跟 0 次或多次重复 1。
我是对的还是我遗漏了什么?谢谢。
regex - 确定两种语言是否相等 [正则表达式]
准备考试并且正在经历这个问题:
判断 R1 表示的字符串集合是否是 R2 的子集?
我的尝试:由于代表相同的表达式,我试图证明它们是相同的 R1 ⊆ R2
我试图证明 R2 与 R1 相同:所以我尝试了这个,使用正则表达式等价定理:
((01 + ε)* + (10 + ε) ) = (01 + ε) + (10 + ε)*
现在我被卡住了,我正在考虑在这里应用关联规则并显示 (01 + ε)* + (10 + ε)* = (01 + 10)* + (ε + ε)* = (01 + 10) * // 我认为这一步可能是错误的
因此 R2 = R1
步骤: (01 + ε)* + (10 + ε)* = (01 + 10)* + (ε + ε)* = (01 + 10)*
我认为是错误的,我认为我应用了错误的结合律,当它上面有 * 时我不知道如何使用它。对此的任何帮助将不胜感激。请 :)