我无法使用{a, b, c}
上的字符串集构建正则表达式,其长度为odd
,完全一a
。到目前为止,这是我最好的尝试:
(bb|bc|cb|cc)*a(bb|bc|cb|cc)*
这对于b
的任意一侧的c
和a
都有效,但不会考虑奇怪的b
和c
组合a
的任何一方。
任何提示?
答案 0 :(得分:4)
您的字符串将是前缀,后跟 a ,后跟后缀。
前缀和后缀都可以为零长度。如果不是,它们必须是均匀的或两者都不均匀。这意味着您有两个主要案例。
EVENPREFIX a EVENSUFFIX | UNEVENPREFIX a UNEVENSUFFIX
尝试此操作(不完整和错误):
([bc][bc])*a([bc][bc])*|([bc][bc][bc])*a([bc][bc][bc])*
还有一个不平衡的案例缺失:一个[bc]
:
(([bc][bc])*a([bc][bc])*)|([bc]([bc][bc])*a[bc]([bc][bc])*)
根据http://www.fileformat.info/tool/regex.htm,匹配
a
cac
ccabb
我希望它与其他人匹配......
左侧保证b
或c
的偶数(或空)序列。
右侧是单个b
或c
,后跟两个的倍数(因此它保持不均匀)。
Kobi想出了上述内容的改进:
([bc][bc])*(a|[bc]a[bc])([bc][bc])*
这是如何运作的?
第一组保证是平等的。第二组保证不均匀,内部有一个a
。第三组保证是平等的。因此,整体保证不平衡。