Regex 基于1';s在0';在一个二进制字符串中
现在是期末考试时间,我在一次旧的考试中遇到了这个问题: 给出一个表示Regex 基于1';s在0';在一个二进制字符串中,regex,computer-science,computation-theory,Regex,Computer Science,Computation Theory,现在是期末考试时间,我在一次旧的考试中遇到了这个问题: 给出一个表示diff(x)的正则表达式,其中: -diff(x)是x中1的数量减去x中0的数量 -1不确定您正在寻址的正则表达式引擎,您需要一个具有一些递归支持的引擎,如.NET(平衡组)或PCRE(递归)。以下内容在.NET中有效且有效: ^((?<-Z>1)|(?<-O>0)|(?<O>1)|(?<Z>0))*$(?<-O>)(?<-O>)?(?<-O>
diff(x)
的正则表达式,其中:
-diff(x)是x中1的数量减去x中0的数量
-1不确定您正在寻址的正则表达式引擎,您需要一个具有一些递归支持的引擎,如.NET(平衡组)或PCRE(递归)。以下内容在.NET中有效且有效:
^((?<-Z>1)|(?<-O>0)|(?<O>1)|(?<Z>0))*$(?<-O>)(?<-O>)?(?<-O>)?(?(O)(?!))(?(Z)(?!))
^((?1)|(?0)|(?1)|(?0))*$(?)(?)(?)(?)(?)(?)((?)((O)(?!)((Z)(?))
不可能根据需要构建正则表达式。如果是这样的话,为了区分输入0^n1^n111
和0^n1^n1111
,就需要一个有限状态自动机实现一个无界计数器。显然,这是无法实现的,至少在理论上是如此(但是,如果x
的任何前缀中的1和0的数目之间的差值以常数为界,则可以实现这一点)
这在实践中可能无关紧要,因为几乎每个常见的正则表达式引擎都比正则表达式识别器更强大,但它可能与考试问题相关
^((?<-Z>1)|(?<-O>0)|(?<O>1)|(?<Z>0))*$(?<-O>)(?<-O>)?(?<-O>)?(?(O)(?!))(?(Z)(?!))