RegEx差异的答案

时间:2018-04-15 21:37:31

标签: regex

我有一个问题要求非空字符串以两个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,所以它不被接受。我无法弄明白,有人可以把我推向正确的方向。

5 个答案:

答案 0 :(得分:3)

一种可能性^(?=11)[01]*11$。见demo。这里使用前瞻来断言字符串以11开头,它很适合边缘情况(11111),因为它不会消耗字符,然后匹配整个字符串,[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回答它是完美的。