正则表达式:使表达更短的方法

时间:2014-01-02 09:47:08

标签: regex

我有这样的正则表达式:

^([0369]|[258][0369]*[147]|([147]|[258][0369]*[258])([0369]|[0369]*[147][0369]*[258])*([258]|[147][0369]*[147]))+$

我是用有限自动机构建的,但表达式太长了。有许多重复的符号组,例如[0369]。有没有办法为这组符号创建一些较短的别名?

或许你可以建议其他一些方法来缩短它?

1 个答案:

答案 0 :(得分:2)

以下是正则表达式的可视化:

Regular expression visualization

如果你的味道支持递归子模式,你可以像这样简化正则表达式:

/^(
    (?<A>[0369]) |
    (?<B>[258])(?&A)*(?<C>[147]) |
    (
      (?&C) | (?&B)(?&A)*(?&B)
    )
    (
      (?&A) | (?&A)*(?&C)(?&A)*(?&B)
    )*
    (
      (?&B) | (?&C)(?&A)*(?&C)
    )
  )+
 $/x

在视觉上给出了

Regular expression visualization

你很难得到更简单的东西。