Regex 正则表达式根据字符数和特定字符的存在而取消挂起

Regex 正则表达式根据字符数和特定字符的存在而取消挂起,regex,symbols,Regex,Symbols,我的字母表是{0,1}。我希望将令牌与奇数(或偶数)个符号匹配,但它必须至少包含一个0和至少一个1。我尝试了这个正则表达式: ^(?=0*?1)(?=1*?0)[01](?:[01]{2})* 但是如果输入是11111 0,则它与11111匹配,并且它是不正确的。因为这听起来像自动机理论,所以这里有一个基于此的答案 您应该能够提出以下7状态DFA: 单击图像以查看放大版 左侧的DFA用于偶数长度字符串,右侧的DFA用于奇数长度字符串。状态上的标签为“[当前长度(奇数或偶数)]/[0遇到][1遇

我的字母表是
{0,1}
。我希望将令牌与奇数(或偶数)个符号匹配,但它必须至少包含一个
0
和至少一个
1
。我尝试了这个正则表达式:

^(?=0*?1)(?=1*?0)[01](?:[01]{2})*


但是如果输入是
11111 0
,则它与
11111
匹配,并且它是不正确的。

因为这听起来像自动机理论,所以这里有一个基于此的答案

您应该能够提出以下7状态DFA:

单击图像以查看放大版

左侧的DFA用于偶数长度字符串,右侧的DFA用于奇数长度字符串。状态上的标签为“[当前长度(奇数或偶数)]/[0遇到][1遇到]”

那你就可以。。。或者只是用来为你做这些

奇数长度字符串的正则表达式(可用于您喜爱的正则表达式风格):

对于偶数长度的字符串:

(10|01|(11)+(10|0[10])|(00)+(01|1[10]))([10]{2})*

如果你锚定双方,它应该是正确的。@nhahdh,我想我不明白你所说的“锚定”是什么意思。好的,但在这种情况下,如果我的输入是
111100
,我没有匹配项,我应该是
11110
。那么你的问题是什么。。。
(10|01|(11)+(10|0[10])|(00)+(01|1[10]))([10]{2})*