我无法理解如何为给定的正则表达式确定有效的字符串。自提供答案键以来,我就知道答案了,但是没有任何解释,如果有人可以解释如何确定以下答案,我将不胜感激:
使用以下每个正则表达式描述的语言提供有效的字符串,字母∑ = {0,1,2}。
(a)0(010)* 1
answer:01,00101,00100101,00100100100101
(b)(21∪10)* 0012
answer:001,001222,21001,10001,210012,2121001222,102121001
(c)1 *(200)*∪100 * 01
answer:1,200,111,11200200,111200200200,1001,1000001,10000001
谢谢!
答案 0 :(得分:1)
首先,这个问题与regular expressions in the formal language theory有关,而不是与软件开发中使用的正则表达式有关(后者是用于字符串搜索的模式,这是基于定义的概念的实际软件实现)前者)。
在您的问题中,正则表达式是对与该表达式匹配匹配的一组字符串的描述。字符0
,1
和2
相互匹配,而*
字符表示前一个字符或一组字符(在括号中)可以重复0次或更多次,并且∪
字符是联合运算符。
鉴于此,我们看到正则表达式0*
匹配一个空字符串和以下字符串:0
,00
,000
等。类似地,{{1 }}匹配一个空字符串(0 ∪ 1)*
,0
,1
,00
,01
,10
等-基本上,任何字符串由11
和0
构建。正则表达式1
匹配所有以1零开头,然后是一个或多个1并以2结尾(例如01*2
,02
,012
等)的字符串。 / p>
基于此,您可以将第一个示例中的正则表达式翻译为英语,即“以0112
开头的字符串,然后是出现零次或多次的一组三位数字0
,后跟010
',因此所有给定的答案都匹配。但是在第二个示例中,只有1
与正则表达式匹配,所有其他答案均不匹配(或者您可能最终错过了210012
:如果正则表达式为*
,则答案将立即变得更有意义)。我将为您留出第三个例子。
请注意,在所有三种情况下,还有更多与给定表达式匹配的字符串,而不仅仅是在答案中给出的字符串。