我有这样的正则表达式:
^([0369]|[258][0369]*[147]|([147]|[258][0369]*[258])([0369]|[0369]*[147][0369]*[258])*([258]|[147][0369]*[147]))+$
我是用有限自动机构建的,但表达式太长了。有许多重复的符号组,例如[0369]
。有没有办法为这组符号创建一些较短的别名?
或许你可以建议其他一些方法来缩短它?
答案 0 :(得分:2)
以下是正则表达式的可视化:
如果你的味道支持递归子模式,你可以像这样简化正则表达式:
/^(
(?<A>[0369]) |
(?<B>[258])(?&A)*(?<C>[147]) |
(
(?&C) | (?&B)(?&A)*(?&B)
)
(
(?&A) | (?&A)*(?&C)(?&A)*(?&B)
)*
(
(?&B) | (?&C)(?&A)*(?&C)
)
)+
$/x
在视觉上给出了
你很难得到更简单的东西。