我正在尝试制作一个正则表达式,它将与一个数字匹配,其总和是奇偶校验,是偶数。所以 802 (8+0+2) 是偶数,而 902 (9+0+2) 是奇数。显然,有一个算术定律可以在不计算或违反任何 Regex 规则的情况下执行此 Regex。我为偶数制作了一个正则表达式,但不是为偶数奇偶校验。
编辑:允许接受前导零,数字可以是任意长度(显然小于 int 在大多数语言中的最大大小)
谢谢!
这是一个非常棘手的问题(我是正则表达式的新手),但我刚刚了解到您可以在某些正则表达式中使用递归。
这就是我想出的:
String regex = "(([02468]*[13579]){2}(?R))|[02468]*$";
这个想法是使用一个巧妙的简化,其中一个数字的奇偶性只有当奇数位为偶数时才为偶数,因为偶数个奇数位的总和总是偶数,并且任何偶数位的总和总是偶数. 解释:
([02468]*[13579]){2} → 2 odd digits separated by any number of even digits
(?R) → Repeat the whole regex on the string after match
| → OR
[02468]*$ → the rest of String is 0 or more even digits
EDIT
Recursion 只是使符号更简单,但没有递归仍然是可能的(像Java这样的一些语言没有实现递归),想法是一样的:
String regex = "(([02468]*[13579]){2})*[02468]*$"