标签: regular-language

过渡中的歧义:如何在NFA中处理字符串?

我已经根据给定的正则表达式制作了DFA,以匹配测试字符串。在某些情况下.*会发生这种情况。(例如.*ab)。假设现在计算机处于状态1。在DFA中,.*是指所有字符到其自身的过渡, 是指从状态1到a的另一过渡。如果测试字符串包含“ a”,则可能是过渡,因为从状态1开始,计算机可以进入两种状态,这在DFA中是不可能的。

regex dfa nfa regular-language kleene-star

3
推荐指数
1
解决办法
1333
查看次数

无限语言的正则表达式

我只是对正则表达式感到困惑.可以有一个识别无限语言的正则表达式,还是所有正则表达式都能识别有限语言?

regex theory computer-science regular-language

3
推荐指数
1
解决办法
1122
查看次数

检查正则表达式是否不明确

我想知道是否有一种方法可以自动检查正则表达式的歧义性。如果存在可以通过正则表达式中的多种方式匹配的字符串,则该正则表达式被视为不明确。例如,给定一个 regex R = (ab)*(a|b)*,我们可以检测到这R是一个不明确的正则表达式,因为有两种方法可以匹配ab来自 R 的字符串。

更新

问题是如何检查正则表达式的定义是否不明确。我知道在正则表达式机制的实际实现中,总是有一种方法来匹配正则表达式,但请以学术的方式阅读和思考这个问题。

regex regular-language

3
推荐指数
1
解决办法
2527
查看次数

REGEX 表达式的简化

我需要证明或反驳以下正则表达式

(RS + R )* R = R (SR + R)*
// or, for programmers:
/(RS|R)*R/ == /R(SR|R)*/
Run Code Online (Sandbox Code Playgroud)

我有一种强烈的直觉,认为它们是等价的,但是我如何使用 REGEX 定律给出一步一步的证明。

regex computer-science regular-language

3
推荐指数
1
解决办法
5646
查看次数

如何确定上下文无关语法是否描述了常规语言?

给定任意上下文无关语法,我如何检查它是否描述了常规语言?

我不是在寻找考试“技巧”。我正在寻找一种可以编写代码的万无一失的机械测试。

如果有帮助的话,这里是我可能会收到作为输入的 CFG 示例。具体来说,请注意,答案一定比仅仅寻找左递归或右递归复杂得多,因为另一种类型的递归的存在并不自动意味着语法是不规则的。

S: A B C D X
A: A a
A:
B: b B
B:
C: c C c
C: c
D: D d D
D: d
X: x Y
X:
Y: y X
Y:
Run Code Online (Sandbox Code Playgroud)

grammar finite-automata context-free-grammar regular-language formal-languages

3
推荐指数
1
解决办法
1678
查看次数

使用java从xml中删除包含实体的doctype

我正在尝试处理一个 xml,在此之前我需要从输入 xml 中删除文档类型和实体声明。

我正在使用以下代码删除文档类型和实体:

fileContent = fileContent.replaceAll("<!ENTITY ((.|\n|\r)*?)\">", "");
fileContent = fileContent.replaceAll("<!DOCTYPE((.|\n|\r)*?)>", "");
Run Code Online (Sandbox Code Playgroud)

这将删除实体,然后删除文档类型。如果 xml 在 xml 中包含以下 doctype 声明,这将正常工作:

<!DOCTYPE ichicsr SYSTEM "http://www.w3.org/TR/html4/frameset.dtd">

<!DOCTYPE ichicsr SYSTEM "D:\UPGRADE\NTServices\Server\\Xml21.dtd"
[<!ENTITY % entitydoc SYSTEM "D:\UPGRADE\NTServices\Server\\latin-entities.dtd"> %entitydoc;]>
Run Code Online (Sandbox Code Playgroud)

但是如果我有下面给出的文档类型,它就不起作用并且 xml 中的根标记被剥离:

<!DOCTYPE ichicsr SYSTEM "D:\UPGRADE\NTServices\Server\\Xml21.dtd" 
[<!ENTITY % entitydoc SYSTEM 'D:\UPGRADE\NTServices\Server\\Xml21.dtd'>
]> 
Run Code Online (Sandbox Code Playgroud)

如果我使用的正则表达式不正确或需要采取任何其他措施,请告诉我。

java regex xml string regular-language

3
推荐指数
1
解决办法
891
查看次数

正则表达式替换最短匹配

我的字符串是这样的sfdfdsfdsf start112matlab2336end gfdgdfgkknfkg start558899end dfdsfd

我们怎样才能以结果的方式替换字符串的一部分

sfdfdsfdsfgfdgdfgkknfkgdfdsfd

即需要删除粗体内容.

regex regular-language

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

需要多语言的正则表达式,只允许使用字母表

我需要正则表达式,它只允许任何语言的字母表,但不允许使用特殊字符和数字.现在我正在使用此快递,但它不适用于阿拉伯语

 ^(?=.{1,})[a-zA-Z'.\s]{1,50}$
Run Code Online (Sandbox Code Playgroud)

c# regex asp.net regular-language

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

正则表达式,奇数为1且至少为0

我正在设计一个奇数为1的正则表达式,并且至少有一个0. {0,1}上的字符串集

到目前为止我有这个:

0+1(0+10+1)*0+
Run Code Online (Sandbox Code Playgroud)

它是否正确?

regex regular-language

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

Java正则表达式。如何获得文本的3个不同部分?

我在Java中有这个很长的字符串

200/23 / Ne7WoRK / 3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18> a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a> 03cf334295615f981c47e

我要实现的目标是:

竞标价格:200

用户名:Ne7WoRK

签名:3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a03cf334295615f981c47e

我需要3个正则表达式,可以帮助我分别获取出价值,用户名和签名的字符串。我不确定如何实现这一目标。我试图解决此问题的方法是使用以下正则表达式

\ b。* / \ b

但是,此正则表达式匹配整个3个子部分,并给出了此输出

200/23 / Ne7WoRK /

我不确定如何创建3个不同的正则表达式,其中:

  1. 第一个将匹配从字符串开头到第一个“ /”符号的任何数字。给200的弦
  2. 第二个将匹配从第二个“ /”符号到第三个“ /”符号的任何字符。给Ne7WoRK
  3. 第三个应该匹配从第三个“ /”到字符串末尾的所有内容。提供大量-3045022100d62568e28cb58b4a5308750e63e4690c4538ddc18a9dc6075d02f7b4f942c4aa0220587350e7db1f4380a36ebb441906833563d32a62c4a03cf334295615f981c47e

java regex regular-language

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