基于二进制字符串中1和0的差异匹配的正则表达式

时间:2011-12-12 23:00:02

标签: regex computer-science computation-theory

所以,这是决赛时间,我在一次旧考试中遇到了这个问题:

提供一个表示diff(x)的正则表达式,其中:

- diff(x) is the number of 1's in x minus the number of 0's in x
- 1 <= diff(x) <= 3

e.g。

 diff(10110100111) = 7-4 = 3
 diff(11100011) = 5-3 = 2
 diff(10011) = 3-2 = 1

2 个答案:

答案 0 :(得分:2)

不应该根据需要构建正则表达式。如果你有一个有限状态自动机必须实现一个无界计数器,以区分输入0^n1^n1110^n1^n1111。显然这至少在理论方面是无法实现的(但是,如果x的任何前缀中的1和0的数量之间的差异由常数限制,则可以实现。)

在实践中可能无关紧要,因为几乎每个常见的正则表达式引擎都比正则表达式识别器更强大,但它可能与考试问题相关。

答案 1 :(得分:1)

不确定您正在寻址的正则表达式引擎,您需要一个具有一些递归支持的引擎,例如.NET(平衡组)或PCRE(递归)。以下是有效的,适用于.NET:

^((?<-Z>1)|(?<-O>0)|(?<O>1)|(?<Z>0))*$(?<-O>)(?<-O>)?(?<-O>)?(?(O)(?!))(?(Z)(?!))