使用正则表达式确定字符串是偶数还是奇数长度

时间:2010-09-02 09:47:17

标签: regex

我无法使用{a, b, c}上的字符串集构建正则表达式,其长度为odd完全a。到目前为止,这是我最好的尝试:

(bb|bc|cb|cc)*a(bb|bc|cb|cc)*

这对于b的任意一侧的ca都有效,但不会考虑奇怪的bc组合a的任何一方。

任何提示?

1 个答案:

答案 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

我希望它与其他人匹配......

左侧保证bc的偶数(或空)序列。 右侧是单个bc,后跟两个的倍数(因此它保持不均匀)。

Kobi想出了上述内容的改进:

([bc][bc])*(a|[bc]a[bc])([bc][bc])*

这是如何运作的?

第一组保证是平等的。第二组保证不均匀,内部有一个a。第三组保证是平等的。因此,整体保证不平衡。