我正在尝试制作一个与一个数字相匹配的正则表达式,它的总和是奇偶校验。因此802(8 + 0 + 2)是偶数,并且902(9 + 0 + 2)是奇数。显然,有一个算术法来执行此正则表达式,不计算或破坏任何正则表达式的规则。我为偶数制作了一个正则表达式,但不是偶数奇偶校验。
编辑:允许接受前导零,数字可以是任意长度(明显小于int在大多数语言中的最大大小)
谢谢!
答案 0 :(得分:0)
这是一个非常棘手的问题(我是regex的新手),但我刚刚了解到你可以在一些正则表达式中使用递归。
这就是我提出的:
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
修改强>
递归只会使符号更简单,但如果没有递归它仍然是可能的(某些语言如Java没有实现递归),这个想法是一样的:
String regex = "(([02468]*[13579]){2})*[02468]*$"