Regex 匹配至少包含一个“的偶数”;5“;数字

Regex 匹配至少包含一个“的偶数”;5“;数字,regex,Regex,我必须找到定义任意偶数的正则表达式,其中至少有一个“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您的regexp看起来不错。我不认为你能把它缩短(如果我们谈论的是理论上的正则表达式;真正的编程语言有快捷方式,比如任何数字的[0-9]或\d) 正如其他人指出的那样,您的regexp还将匹配从任意数量的零开始的数

我必须找到定义任意偶数的正则表达式,其中至少有一个“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

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

正如其他人指出的那样,您的regexp还将匹配从任意数量的零开始的数字。如果您不想这样做,您当然会尝试将第一个数字与
(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
匹配,但现在您遇到了一个特殊情况:如果第一个数字是
5
?因此,您必须添加更多分支

您的regexp很好,但我认为让它只匹配数字而不匹配前导零是一个很好的练习,您无论如何都应该尝试它,即使您的任务不需要这样做


这里有一个一般性的建议。需要您创建正则表达式的问题最好能得到帮助。也就是说,在尝试编写regexp之前,您要为它创建一组测试。它有许多好处:


  • 如果您已经编写了许多测试,并且regexp通过了测试,那么几乎可以肯定您已经编写了测试
  • 若在创建regexp之前编写测试,那个么测试的质量会更高
  • 看到您新手工制作的regexp立即通过了一组彻底的测试,您会很高兴,相信我=)

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

    正如其他人指出的那样,您的regexp还将匹配从任意数量的零开始的数字。如果您不想这样做,您当然会尝试将第一个数字与
    (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
    匹配,但现在您遇到了一个特殊情况:如果第一个数字是
    5
    ?因此,您必须添加更多分支

    您的regexp很好,但我认为让它只匹配数字而不匹配前导零是一个很好的练习,您无论如何都应该尝试它,即使您的任务不需要这样做


    这里有一个一般性的建议。需要您创建正则表达式的问题最好能得到帮助。也就是说,在尝试编写regexp之前,您要为它创建一组测试。它有许多好处:


  • 如果您已经编写了许多测试,并且regexp通过了测试,那么几乎可以肯定您已经编写了测试
  • 若在创建regexp之前编写测试,那个么测试的质量会更高
  • 看到您新手工制作的regexp立即通过了一组彻底的测试,您会很高兴,相信我=)

  • 在你的符号中,
    +
    是指
    |
    吗?看起来不错,但你应该先决定一个符号(在理论CS中,你通常使用
    |
    )。你必须涵盖数字不能以
    0
    开头的问题吗?@Howard从数学上讲,012345=12345(因此它应该是不相关的)@霍华德:这个问题读起来就像是来自一个介绍性的自动机类,而不是来自实际的编程类。你的符号中的
    +
    是不是意味着
    |
    ?看起来不错,但你应该先决定一个符号(在理论CS中,你通常使用
    |
    ).你是否必须涵盖数字不能以
    0
    开头的问题?@Howard从数学上讲,012345=12345(因此它应该是不相关的)@Howard这个问题读起来好像来自一个介绍性的自动机类,而不是实际的编程类“如果您已经编写了许多测试,并且regexp通过了测试,那么您几乎可以肯定您已经编写了测试。”这是将测试与拼写检查进行比较的双关语吗?“如果您已经编写了许多测试,并且regexp通过了测试,那么您几乎可以肯定您已经编写了测试。”这是将测试与拼写检查进行比较的双关语吗?