^((1000,00)|(0?\d{1,3},\d{2}))$
这个正则表达式应该从'0,01'匹配到'1000,00',允许前导零,如'0001,01'
我知道如何修复正则表达式,这不是问题,困扰我的是0?
在字符串0,00
中没有贪婪的事实。它应该“吃掉”0并且不留任何东西让\d{1,3}
匹配,从而使字符串无效。
然而,这种情况不会发生,我想知道原因。
答案 0 :(得分:1)
这很贪婪,但这并不意味着引擎不会回头试图匹配模式。
在您的示例中,如果0?
与0
中的前导0.00
匹配,则以下\d{1,3}
无法匹配任何内容,导致匹配失败。引擎首先对此进行测试,但看到失败后尝试匹配而不使用0
。在这种情况下,会找到使用\d{1,3},\d{2}
的匹配项。
答案 1 :(得分:1)
最初,0?
与第一个0
匹配。但由于\d{1,3}
之后匹配失败,引擎会放弃此匹配并回溯。如果您不希望引擎放弃匹配,请使用possessive quantifier:
^((1000,00)|(0?+\d{1,3},\d{2}))$
^
使用占有量词,交易全部或全无。