这个练习的解是下面的正则表达式吗?我在网上找到的,但我不相信这是正确的。
(1*011*(0+011*))*
根据《计算语言学与自然语言处理手册》一书中第一章的理论,我该如何解决这个练习呢?我想要一个正则表达式,将满足下面的正则语言
L = {010,0101,0110,0101010,01011110,.....}
iq3niunx1#
下面是另一个选项:
^[^0]*[0]{1}([^0]+[0]{1}[^0]*)+$
h79rfbju2#
您可以选择:
^(?!.*00.*)(?=.*0.*0).*$
你可以玩它here。说明:
(?!.*00.*)
0
(?=0.*0)
如果您不想使用lookaround,请使用Maria的答案
vyswwuz23#
(1+01)* 0 (1+) 0 (1+10)*
这样就解决了问题
hjqgdpho4#
不如这样吧:
0[^0]+0
零0后跟“非零”范围内的字符[^0]后跟零0。
[^0]
roejwanj5#
您发布的正则表达式是错误的,只需注意它有一个0+子序列,该子序列应该允许一个或多个0的序列。可以使用以下解决方案更正该问题:
0+
1*011*0(10?)*
或与+运算子搭配使用
+
1*01+0(10?)*
对此的解释应该是:首先跳过所有以1*子模式开始的表达式,这样就得到了第一个0,然后跳过至少一个1,以及其后的所有1(子模式为1+)直到第二个0,因此我们刚刚匹配了与常规语言匹配的最小长度字符串。其余的都是可选的,我们需要重复任意次数的模式1,并在后面添加可选的0(如10?),或者应该有两个连续的0。您可以在demo中检查它,它包含所有可能的字符串(从1到8个字符),以及它们是否匹配。
1*
1
1+
10?
hs1rzwqc6#
如果至少有2个0,那么开头也有可能是1,那不就是1* 0 1* 0(1+01)* 但是如果按照给定的语言(开头和结尾都是2个0),那么就是0(1+01)* 0
bqujaahr7#
1*01(1|01)*01*
我觉得这样会很好
ccrfmcuu8#
给定语言至少包含两个零,但不包含连续零该语言接受的字符串为L= {010,0101,0110,01010,01011110,.....}匹配的正则表达式为:
1*01*(10+101*)^+
这里+表示至少出现一次。以上语言的DFA显示在此链接中:DFA IMAGE
8条答案
按热度按时间iq3niunx1#
下面是另一个选项:
h79rfbju2#
您可以选择:
你可以玩它here。
说明:
(?!.*00.*)
输入不能有两个连续的0
(?=0.*0)
输入必须包含至少两个0
如果您不想使用lookaround,请使用Maria的答案
vyswwuz23#
这样就解决了问题
hjqgdpho4#
不如这样吧:
零
0
后跟“非零”范围内的字符[^0]
后跟零0
。roejwanj5#
您发布的正则表达式是错误的,只需注意它有一个
0+
子序列,该子序列应该允许一个或多个0
的序列。可以使用以下解决方案更正该问题:或与
+
运算子搭配使用对此的解释应该是:首先跳过所有以
1*
子模式开始的表达式,这样就得到了第一个0
,然后跳过至少一个1
,以及其后的所有1
(子模式为1+
)直到第二个0
,因此我们刚刚匹配了与常规语言匹配的最小长度字符串。其余的都是可选的,我们需要重复任意次数的模式1
,并在后面添加可选的0
(如10?
),或者应该有两个连续的0
。您可以在demo中检查它,它包含所有可能的字符串(从1到8个字符),以及它们是否匹配。hs1rzwqc6#
如果至少有2个0,那么开头也有可能是1,那不就是1* 0 1* 0(1+01)* 但是如果按照给定的语言(开头和结尾都是2个0),那么就是0(1+01)* 0
bqujaahr7#
我觉得这样会很好
ccrfmcuu8#
给定语言至少包含两个零,但不包含连续零
该语言接受的字符串为L= {010,0101,0110,01010,01011110,.....}
匹配的正则表达式为:
这里
+
表示至少出现一次。以上语言的DFA显示在此链接中:
DFA IMAGE