【发布时间】:2020-03-13 15:25:37
【问题描述】:
我尝试为不包含000的字符串集编写正则表达式,其中字母表为{0,1}。我正在寻找运营商最少的解决方案。
我试过了:
(!+0+00)(1(!+0+00))*
* 是克林星
+ 是联合运算符
!用于表示空字符串。
我也不确定它是否正确。
我不知道是否还有其他运算符,例如出现次数等。
【问题讨论】:
-
如果空字符串不应该匹配
^(1*0{1,2}(1+0{0,2})*|1+)$regex101.com/r/LNsgnH/1 或积极的前瞻如果支持^(?![01]*000)[01]+$regex101.com/r/yonYZl/1 可能会这样 -
或者如果允许空字符串
^(0{0,2}1+)*0{0,2}$regex101.com/r/NHaDTH/1 -
(!+0+00)((1+10+100)*) -
@Thefourthbird 据我所知,我提到的那些是唯一允许的运算符。
-
当您说最简单时,您是指最小总操作数吗?你算什么操作?形式上,我认为 Kleene 闭包 (
*)、析取 (+) 和串联(并置)是可数操作,jhnc 的答案非常接近最优(但是,根据这些规则,将 1 和 1 分解的 0 可能会降低操作总数;例如(!+0(!+0))(1(!+0(!+0)))*
标签: regex automata finite-automata nfa automata-theory