You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构造以两个1首尾的{0,1}串的正则表达式优化问询

解决方案

要匹配以两个1开头、两个1结尾,仅包含0和1的非空字符串(包括11、111、1111、1100011这类情况),最简洁且正确的正则表达式是:

^11[01]*(?<=11)$

为什么这个正则有效?

我们拆解一下各部分的作用:

  • ^11:强制字符串开头必须是两个连续的1,直接排除了开头不符合的情况。
  • [01]*:允许开头两个1之后出现任意数量(包括0个)的0或1,覆盖了中间所有可能的内容。
  • (?<=11)$:这是一个反向预查,强制字符串的最后两个字符必须是11——它会检查结尾位置的前两个字符是否为11,既覆盖了11这种首尾重叠的情况,也支持111(最后两个字符是11)、11011这类长度更长的字符串。

分析你之前的尝试问题

  1. 第一个正则^(1{2,4}|(11[01]*0[01]*11))$:

    • 逻辑过于复杂,且存在遗漏:比如111、111011这类中间没有0的字符串会被漏掉,同时1{2,4}只能匹配长度2-4的纯1字符串,无法覆盖更长的纯1字符串(比如11111)。
  2. 第二个正则11(0|1)*(11)*:

    • 核心问题是没有强制结尾必须是11:(11)*可以匹配0个或多个11,导致像110、1101这类结尾不是11的字符串也会被错误匹配。同时它没有限制开头锚点^和结尾锚点$,可能会匹配字符串中的子串(比如在0110中匹配到11)。

另一种等价的简洁写法

如果你对反向预查不太熟悉,也可以用分支结构覆盖两种情况(首尾重叠的11,以及首尾不重叠的更长字符串):

^11$|^11[01]+11$

但这种写法需要维护两个分支,不如反向预查的版本简洁。

内容的提问来源于stack exchange,提问作者A.Adams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:07:40