Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 基于1';s在0';在一个二进制字符串中_Regex_Computer Science_Computation Theory - Fatal编程技术网

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)(?!))