让Sigma = {a,b}
。正则表达式RE = (ab)(ab)*(aa|bb)*b over Sigma
。
我把括号放在那里,因为它们在RE中。我理解为什么我不需要,但我的回答是不正确的?我使用RegEx测试它,并且表达式(ab)aab匹配文本abaab,但是当我颠倒它时它不匹配。
答案 0 :(得分:1)
您的回答是错误的,因为括号不属于您的符号集。仅使用(ab)aab
集中存在的符号无法生成字符串{a,b}
。
更多的是,您被要求提供一个包含5个符号的字符串,但(ab)aab
的长度为7
。
括号在regex
中具有特殊含义。他们创建子regexp和捕获组。例如,(ab)*
表示ab
可以匹配任意次,包括零。如果没有括号,ab*
表示regex
匹配一个a
,后跟任意数量的b
。这是一个不同的表达方式。
例如:
(ab)*
匹配空字符串(ab
零次),ab
,abab
,ababab
,abababab
等等上; ab*
匹配a
(后跟零b
s),ab
,abb
,abbb
,{{1等等。如果您只查找子regexp,则示例中的第一组括号无用。 abbbb
和(ab)
个表达式仅匹配ab
字符串。但它们可用于捕获字符串的匹配部分,并将其重新用于后引用或替换。
当括号用于正则表达式中的子表达式时,它们是元字符,不匹配字符串中的任何内容。为了匹配开括号字符ab
(在字符串中找到),您必须在(
:regex
中将其转义。
与\(
上的正则表达式(ab)(ab)*(aa|bb)*b
匹配的多个字符串:Sigma = { 'a', 'b' }
,abb
,ababb
,abababababb
。
最后一个字符串(ababababaabbaaaabbb
)与ababababaabbaaaabbb
部分匹配,如下所示:
regex
与ab - (ab)
ababab - (ab)* - ('ab' 3 times)
aabbaaaabb - (aa|bb)* - ('aa' or 'bb', 5 times in total)
b - b
字符串匹配的regex
为(ab)aab
,但在这种情况下为
\(ab\)(ab)*(aa|bb)*b
答案 1 :(得分:1)
()
是正则表达式的语法并具有语义含义,您可以查看here和here
与^
或&
以及正则表达式中的其他保留字符类似,您必须使用特殊句柄来匹配它们,例如:Regex to Match Symbols: !$%^&*()_+|~-=`{}[]:";'<>?,./
此外,特别是在您的问题上下文中,()
不应作为字符串的一部分出现,因为它不在字符集(字母表){a,b}
中。你提供的字符串的长度为7而不是5,所以说它是错的是正确的。