Regex 匹配0和1的正则表达式,其中连续1必须为奇数?
我想写一个正则表达式,可以匹配二进制字符串,其中连续的1必须有奇数长度 示例:接受1001110111,不接受10110111Regex 匹配0和1的正则表达式,其中连续1必须为奇数?,regex,Regex,我想写一个正则表达式,可以匹配二进制字符串,其中连续的1必须有奇数长度 示例:接受1001110111,不接受10110111 (1(11)*|0*)* 我想到的最好的是上面的那一个,这是不正确的。这个正则表达式也将匹配连续的偶数1。还有其他想法吗 TIA您可以使用此正则表达式进行负前瞻: ^(?!(?:[01]*0)?(?:1{2})+(?:0|$))[01]+$ 正则表达式详细信息: (?!(?:[01]*0)?(?:1{2})+(?:0 |$):当表达式中任意位置有偶数个1s时,表
(1(11)*|0*)*
我想到的最好的是上面的那一个,这是不正确的。这个正则表达式也将匹配连续的偶数1。还有其他想法吗
TIA您可以使用此正则表达式进行负前瞻:
^(?!(?:[01]*0)?(?:1{2})+(?:0|$))[01]+$
正则表达式详细信息:
:当表达式中任意位置有偶数个(?!(?:[01]*0)?(?:1{2})+(?:0 |$)
s时,表达式匹配失败1
匹配一对(?:1{2})+
s1
确保一对(?:0 |$)
s后面不跟1
1
:仅允许出现(?:[01]*0)?
或在0
s之前启动1
:将0或1的字符串与一个或多个长度匹配[01]+
^(?:(?:0*1(?:11)*(?:0+|$))+|0+)$
字符串的开头^
非捕获组(?:
非捕获组(?:
匹配0+零,0*1(?:11)*
并重复0+次1
11
匹配1+零或断言字符串结尾(?:0+|$)
关闭非捕获组并重复1+次以不匹配空字符串)+
或|
仅匹配零0+
关闭非捕获组)
字符串结尾$
这不需要环视解决方案的复杂性。您尝试的解决方案的基本问题是
0*
,它可以在下一组1
s之前匹配零0
s
0*(1(11)*0+)*(1(11)*)?
这将处理前导0
s。如果您不担心,可以删除0*
“meat”是带有0+
的内部表达式。由一个或多个0
s分隔的1
s奇数组
由于这些组以0
结尾,因此如果字符串以1
结尾,我们需要在末尾添加一个可选的1
s奇数组
请注意,由于上述所有数量都是可选的,因此上述解决方案也将匹配空字符串。如果您至少需要一个1
,它会稍微复杂一些:
0*1(11)*(0+1(11)*)*0*
如果您的正则表达式支持防止回溯
^0*(?:(?:11)*+10*)*$
请注意,这一个也将匹配一个空字符串。
如果字符串始终以
1
开头并包含一个或多个字符,请尝试^(?。*(?)或^(?。*(?:0 |^)(?:1{2})+(?:0 |$)[01]*$
它将连续匹配,因为没有边界或锚点。当它无法从第一个位置匹配时,它将从下一个位置开始。您使用的是什么语言?为什么要使用正则表达式?