标签: regular-language

子串与正则表达式匹配得更快?

在阅读了RE/NFA和DFA之后,似乎找到一个字符串中的子字符串实际上可以使用RE而不是强力O(mn)查找渐近地更快.我的理由是DFA实际上会保持状态并避免不止一次地处理"haystack"中的每个字符.因此,如果使用正则表达式,长字符串中的搜索实际上可能会快得多.

当然,这仅适用于从NFA转换为DFA的RE匹配器.

在使用RE而不是强力匹配器时,有没有人在现实生活中经历过更好的弦乐匹配表现?

regex string regular-language

7
推荐指数
1
解决办法
2830
查看次数

生成正则表达式

通常在我们的工作中,我们在捕获匹配操作中使用正则表达式

但是,可以使用正则表达式 - 至少手动 - 来生成与正则表达式匹配的合法句子.当然,一些正则表达式可以匹配无限长的句子,例如表达式.+.

我有一个问题可以通过使用正则表达式句子生成算法来解决.

在伪代码中,它将运行如下:

re = generate("foo(bar|baz)?", max_match = 100);  #Don't give me more than 100 results
assert re == ("foobar", "foobaz", "foo");
Run Code Online (Sandbox Code Playgroud)

什么算法会为我执行此操作?

regex generative-programming regular-language

7
推荐指数
1
解决办法
815
查看次数

哪种编程语言有常规语法?

我很好奇哪些(如果有的话)现实世界的编程语言都有常规语法(即所有语法正确的程序集是常规的).

另请参阅此问题:哪些编程语言不受上下文限制?.

programming-languages compiler-theory regular-language

7
推荐指数
1
解决办法
1553
查看次数

7
推荐指数
2
解决办法
3055
查看次数

常规语言与非常规语言

任何人都可以帮助我区分常规语言(即那些可以用正则表达式描述的语言)和其他常规语言正式定义不常规的语言吗?此外,你能否提供双方的一些例子?

regex regular-language

7
推荐指数
2
解决办法
9802
查看次数

是否有可能进一步简化这个正则表达式?

我正在为我的编译器类做一些功课,我有以下问题:

写的所有串的正则表达式一个的和b含有奇数个的一个的或奇数的b的(或两者).

经过大量的白板工作后,我想出了以下解决方案:

(aa|bb)* (ab|ba|a|b) ((aa|bb)* (ab|ba) (aa|bb)* (ab|ba) (aa|bb)*)*
Run Code Online (Sandbox Code Playgroud)

但是,这是我能得到的最简化的吗?我已经考虑构建DFA,试图最小化那里的状态数量,看看它是否会帮助我简化,但我想我会首先询问正则表达式专家.

regex regular-language

6
推荐指数
2
解决办法
1550
查看次数

什么是规律性?

这是一个计算机科学问题,而不是编程问题,但我认为这是所有相关网站中最好的问题.

当我发现正则表达式并查找该术语时,我认为这种"规律性"属性指的是表达式语言具有可定义的结构模式.然而,在阅读有关主题及其背后的理论时,我了解到有些语言不规则,但从定义它们的方式来看,很清楚模式可以与它们匹配.一种这样的语言是(a ^ n)(b ^ n).显然这是一种模式,但这不是一种常规语言.所以现在我想知道常规语言是什么使它们成为常规语言,这种语言不是吗?

computer-science regular-language

6
推荐指数
2
解决办法
2776
查看次数

证明语言是正常的

Pumping Lemma用于证明语言不规律.但是如何
证明一种语言是规则的?特别是,

Let L be a language. Define half(L) to be  
{ x | for some y such that |x| = |y|, xy is in L}.  
Prove for each regular L that half(L) is regular.  
Run Code Online (Sandbox Code Playgroud)

是否有任何技巧或一般程序来解决这类问题?

regular-language

6
推荐指数
2
解决办法
7529
查看次数

我可以用交集缩短这个正则表达式吗?

我有这种语言L只包含一个字符串: 在此输入图像描述 写得更简洁 在此输入图像描述

这个字符串有2(2 ^ n-1)个字符,我想减少它.我正在考虑使用交集,如果我能找到一些常规语言,其正则表达式的交集将产生这个字符串.

我在这里有递归函数,以防有助于:

function recursiveRegex(charset) {
if(charset.length == 0) {
    return [];
} else {
    var char = charset.splice(charset.length - 1, 1);
    var returnVal = recursiveRegex(charset);
    return returnVal.concat(returnVal) + char ;
}
}

console.log(recursiveRegex(['a1', 'a2', 'a3', 'a4']));
Run Code Online (Sandbox Code Playgroud)

javascript string-length regular-language

6
推荐指数
1
解决办法
219
查看次数

无限的语言不能规律吗?什么是有限语言?

我在一本关于可计算性的书中读过这篇文章:

(Kleene定理)当且仅当它可以通过应用三个运算联合,连接,重复有限次数从有限语言获得时,语言是规则的.

我正在与"有限语言"斗争.

考虑这种语言: L = a*

它不是有限的.它是一个{0, a, aa, aaa, ...}显然是无限集(0=空字符串)的集合.

所以这是一种无限的语言,对吗?也就是说,"无限集"意味着"无限语言",对吧?

显然,这a*是一种常规语言.它是一种无限的语言.因此,通过Kleene的定理,它不能成为常规语言.矛盾.

我糊涂了.我想我不知道"有限语言"是什么意思.

computability finite-automata regular-language formal-languages kleene-star

6
推荐指数
1
解决办法
2万
查看次数