我对正则表达式有疑问。虽然很简单,但我得到了教授的一些契约答案。我只想在这里澄清一下。
(a + bc)* - 4个最小的是什么 这个正则表达式可以具有的独特模式 给?
我原以为它是epsilon(空字符串),abc,aabc,aaabc。
但是,他的解释是(a + bc)导致a或bc。所以他的答案是epsilon(空字符串),a,bc&& aa(因为明星)
哪一个是正确的?是否有任何链接可以解释这类正则表达式。我检查了维基百科,但他们没有这些东西。你能指点一些与上述类型有关的资源吗?提前谢谢!
答案 0 :(得分:3)
听起来你的教授对+
感到困惑|
。
对于(a+bc)*
,答案可能是ε,abc,aabc,aaabc,正如你所说,而对于(a|bc)*
,答案可能是ε,a,aa,bc,正如他所说。
答案 1 :(得分:1)
你是对的,你的教授是错的(假设你们两人之间没有误解)。
请注意,没有一种单一的正则表达式语言(常规语言有一个共同的定义,但它们不是一回事),尽管许多共享功能,包括您的示例中使用的功能。可以想象有人可能有正则表达式,其中'+'表示alternation,但通常'+'是“前面的一个或多个”和'|'是为了交替。
对于正则表达式资源,请检查Regular-Expressions.info。它列出了各种正则表达式实现的功能。每个实现通常都有自己的页面(例如perlre),这可能有更多或更好的信息。
答案 2 :(得分:0)
我认为正则表达式'+'和'|' reg表达式中的含义相同。 只有背景才能产生差异,特别是Kleene明星。
例如
(a)* +(bc)*表示 - ε,a,aa,bc
但是(a + bc)*和(a | bc)都与-ε,a,aa,abc等相同 (转换为NFA将清除疑点。 在NFA中你有两个替代方案a或bc但是*意味着你可以使用ε返回并选择你想要的任何路径。)
例如来自RE的维基页面 例子:
a | b *表示{ε,“a”,“b”,“bb”,“bbb”,...} (a | b)*表示除“a”和“b”之外没有符号的所有字符串的集合,包括空字符串:{ε,“a”,“b”,“aa”,“ab”,“ ba“,”bb“,”aaa“,...} ab *(c |ε)表示以“a”开头,然后是零或更多“b”,最后可选地为“c”的字符串集合:{“a”,“ac”,“ab”,“abc” ,“abb”,“abbc”,...}