我认为只有在编写正则表达式时才会发生这种情况。我有一个简单的正则表达式来验证一组页码,这些页码稍后将提交到数据库,如5
、10
、25
、50
、100
、250
示例:
/all|5|10|25|50|100|250/
当我执行测试时,上面的正则表达式仅从数字50、100和250中剪切0
,而不是从10
中剪切!!?
在线示例:
http://viper-7.com/IbKFKw
我在这里做错了什么?这次我到底错过了什么?
这是因为在字符串50
中,正则表达式首先匹配有效的5
。在字符串250
中,正则表达式首先匹配有效的25
,并在此处结束。
你可以尝试添加锚点:
/^(?:all|5|10|25|50|100|250)$/
这将强制正则表达式匹配整个字符串,从而返回您要查找的正确匹配项。
备选方案从左到右进行尝试,因此匹配的5
优先于50
。但没有CCD_ 15将CCD_。你可以简单地重新排序:
/all|250|100|50|25|10|5/
或者,可选地将0
添加到相关备选方案中(并且由于?
是贪婪的,因此如果存在0
,则将匹配CCD_20):
/all|50?|100?|250?/
或
/all|(?:5|10|25)0?/
如果这不是为了匹配,而是为了验证(即检查整个字符串),那么按照Jerry的建议,并使用锚点来确保你的号码周围没有不需要的字符:
/^(?:all|5|10|25|50|100|250)$/
(当然,在(?:...)
中,您也可以使用我上面的任何模式,但现在优先级无关紧要,因为不允许不完全匹配。)