0

我必须找到定义任何偶数的正则表达式,其中至少有一个“5”数字。我一直在思考:

(0+1+2+3+4+5+6+7+8+9)* 5 (0+1+2+3+4+5+6+7+8+9)* (0+2+4+6+8)

这行得通吗?有没有办法让它更短?

好吧,我不确定这是否是发布此问题的正确网站...但是标签存在:P

4

1 回答 1

3

你的正则表达式看起来不错。我认为你不能让它更短(如果我们谈论的是理论正则表达式;真正的编程语言有类似[0-9]\d任何数字的快捷方式)。

正如其他人指出的那样,您的正则表达式还将匹配从任意数量的零开始的数字。如果您不想要这个,您当然会尝试将第一个数字与 匹配(1|2|3|4|5|6|7|8|9),但现在您有一个特殊情况:如果第一个数字是5怎么办?所以你必须添加更多的分支。

你的正则表达式很好,但我认为让它只匹配没有前导零的数字是一个很好的练习,你应该尝试一下,即使你的任务不需要这个。


这是一个一般建议。需要您创建正则表达式的问题最好借助测试驱动开发。也就是说,尝试编写正则表达式之前,您需要为其创建一组测试。它有很多好处:

  1. 如果您编写了许多测试并且正则表达式通过了它们,那么您几乎可以肯定您已经编写好了。
  2. 如果您在创建正则表达式之前编写它们,您的测试质量将会更高。
  3. 看到您新近手工制作的正则表达式立即通过您的一系列全面测试,您会很高兴,相信我 =)。
于 2013-06-08T16:38:37.613 回答