求可识别带前导零的正偶数(排除全零)的正则表达式
匹配带前导零的正偶数(排除全零)的正则表达式
正确正则表达式
^(?!0+$)0*\d*[02468]$
问题分析
你之前尝试的第一个正则:
^([0-9]*[1-9][0-9]*)*[02468]$
无法识别002这类带前导零的数,原因是([0-9]*[1-9][0-9]*)*要求字符串中必须包含至少一个非零数字,但前导零之后直接跟偶数的情况(比如002),这部分无法匹配到非零数字,导致整体匹配失败。
修改后的第二个正则:
^([0-9]*[1-9][0-9]*)*[02468]*[02468]$
虽然能匹配002,但[02468]*可以匹配任意数量的偶数(包括全零),再加上结尾的[02468],就会允许全零字符串(如000)通过,产生误匹配。
正则逻辑拆解
^(?!0+$):负前瞻断言,直接排除全由零组成的字符串(比如0、000)0*:匹配任意数量的前导零(可以是0个,即没有前导零的情况)\d*:匹配任意数量的数字,兼容中间没有数字的情况(比如单个偶数2)[02468]$:强制字符串结尾为偶数数字,确保是偶数
验证示例
- 匹配成功:
2、001234、00123400、002、20、16 - 匹配失败:
000、1、003、5
内容的提问来源于stack exchange,提问作者ClassicFresh
相关产品推荐
相关产品推荐

