正则表达式平价

regex parity

1139 观看

1回复

我正在尝试制作一个正则表达式,该正则表达式将与其和(即奇偶校验)为偶数的数字匹配。因此802(8 + 0 + 2)是偶数,而902(9 + 0 + 2)是奇数。显然有一种算术定律可以执行此正则表达式,而无需计算或破坏任何正则表达式的规则。我为偶数制作了一个正则表达式,但没有偶数校验。

编辑:允许接受前导零,并且数字可以是任何长度(显然小于int在大多数语言中可以达到的最大大小)

谢谢!

作者: Janice Maker 的来源 发布者: 2019 年 10 月 29 日

回应 (1)


0

决定

这是一个非常棘手的问题(我是regex的新手),但我刚刚了解到可以在某些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

EDIT
递归仅使表示法更简单,但不进行递归仍可能(某些语言(如Java)未实现递归),其思想是相同的:

String regex = "(([02468]*[13579]){2})*[02468]*$"
作者: Maljam 发布者: 13.04.2016 05:32
32x32