我发现不包含101的正则表达式如下:
0 * 1 * 0 * +(1 + 00 + 000)* +(0 + 1 + 0 +)*
我无法理解作者如何提出这个正则表达式.所以我只想到了不包含101的字符串:
01000100
我似乎上面的正则表达式不匹配上面的字符串.但我不确定.所以尝试在regex101.com上转换为等效的pcre正则表达式,但也失败了(因为可以看出我的正则表达式甚至不匹配包含单个1的字符串.
我的翻译有什么问题?上面的正则表达式确实正确吗?如果不是正确的正则表达式是什么?
阅读 regex101 右侧选项卡中的说明,它告诉您正则表达式的作用(我认为您误解了列表运算符的作用),在列表运算符 ( [
) 内,其他字符(例如)(
将不再是元字符,因此表达式[(0*1*0*)[1(00)(000)]
将等于[01()*[]
这意味着它匹配0 or 1 or ( or ) or [
正则表达式0\xe2\x88\x971\xe2\x88\x970\xe2\x88\x97+(1+00+000)\xe2\x88\x97+(0+1+0+)\xe2\x88\x97\n
\n 的正确翻译如下:
^((?:0*1*0*)|(?:1|00|000)*|(?:0+1+0+)*)$\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n你的正则表达式做什么[(0*1*0*)[1(00)(000)]*(0+1+0+)*]
:
[(0*1*0*)[1(00)(000)]* -> matches any of characters 0,(,),*,[ zero or more times followed by
(0+1+0+)* --> matches the pattern 0+1+0+ 0 or more times followed by
\n] --> matches the character ]
所以你的表达相当于
\n\n[([)01](0+1+0+)*]
这不是匹配不包含的字符串的正则表达式101