我有一个问题要求非空字符串以两个1开头和结尾。字母表是{0,1}。它需要匹配字符串{11,111,1111,11000 ... 11..0011}然而,只要它以2 1结尾,许多1和0之间无关紧要。到目前为止,我有这个:
^(1{2,4}|(11[01]*0[01]*11))$
但我的回答并未被接受,因为它需要简化。沿着这些线11(0|1)*(11)*
的某些东西 - 这会在最后返回无限的11,所以它不被接受。我无法弄明白,有人可以把我推向正确的方向。
答案 0 :(得分:3)
一种可能性^(?=11)[01]*11$
。见demo。这里使用前瞻来断言字符串以11
开头,它很适合边缘情况(11
,111
),因为它不会消耗字符,然后匹配整个字符串,[01]*11$
,只包含1和0,以模式11
结束。
或者根据您现有的方法^(1{2,3}|11[01]*11)$
也应该有效。 demo
答案 1 :(得分:1)
最简单的一个:
11((0*1)*1)*
说明: 当捕获0时,我们必须在结尾处有一个1并且在外部组中有另外一个。
11 # match because 11 and Kleene star group is empty
111 # match 11(e1) -> 111
1111 # match 11(e1)1 --> 1111
11011 # match 11(01)1
11001 # non-match because 11(001) (no 1's at the end)
110111011 # match 11((01)1))(e1)((01)1)
答案 2 :(得分:1)
-j8
^(1{2,4}|11[01]+11)$
^(1{2,3}|11[01]*11)$
答案 3 :(得分:0)
只有0和1? 11开始和结束? 但也匹配" 11"或" 111"?
然后这个正则表达式也这样做:
^11(1|[01]*11)?$
答案 4 :(得分:0)
你的答案非常接近。 (^11[01]*11$|^11+$)
会这样做。
我添加了OR 1+
来涵盖11和111个案例,因为左边的表达涵盖了以11开头的任何内容,然后要么有0和/或1或者没有拥有它们,但绝对有11个。这意味着它匹配的最短字符串将是1111.因此修复。
编辑: 对不起,我回答得太快了。让Psidom回答它是完美的。