You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于右端第10位为1的0、1字符串集合的正则表达式(0+1)* (0+1)^9的逻辑解析咨询

正则表达式:匹配右端第10个符号为1的0/1字符串集合

首先得说,你找到的那个(0+1)* (0+1)^9其实是不对的——它只是匹配任意长度(包括空字符串)的0/1序列后面跟着9个0/1字符,完全没满足“右端第10位是1”这个核心要求。咱们一步步拆解正确思路,再说说这个错误答案的问题出在哪。

正确的正则表达式

满足需求的正则表达式应该是:

(0|1)*1(0|1){9}

如果你的环境里习惯用+表示“或”(虽然标准正则里是用|),也可以写成:

(0+1)*1(0+1)^9

(注:标准正则中重复n次是用{n},有些非标准实现会用^n,根据你使用的工具调整即可)

逻辑拆解

咱们先把需求掰碎了看:“右端第10个符号为1”,意思是从字符串的最后一位(右端第1位)往前数,第10个位置必须是1。那这个位置的右边,必然恰好有9个字符(不管是0还是1);而这个位置的左边,可以是任意长度的0/1字符(包括0长度,也就是字符串刚好10位的情况)。

举几个例子:

  • 刚好10位的字符串:左数第1位就是右数第10位,所以必须是1,后面9位任意 → 1(0|1){9}
  • 11位的字符串:左数第2位是右数第10位,左边可以有1个任意0/1字符,然后是1,再后面9个任意 → (0|1)1(0|1){9}
  • 更长的字符串同理,左边可以有0个或多个0/1字符

把这些情况合并起来,就是任意长度的0/1前缀 + 固定为1的目标位置 + 固定9个任意0/1后缀,也就是上面给出的正则表达式。

你找到的答案为什么错误

假设你看到的(0+1)(0|1)的笔误(否则这个表达式本身语法都有问题,0+1在标准正则里是“一个或多个0,后面跟一个1”),那(0|1)* (0|1)^9的逻辑是:任意个0/1字符,后面跟9个0/1字符。它完全没有约束“右数第10位必须是1”——比如10个0组成的字符串0000000000会被它匹配,但右数第10位是0,不符合要求;再比如11位的00010000000,右数第10位是0,也会被匹配,同样不满足需求。

这个答案的核心问题就是漏掉了“右数第10位必须是1”这个关键约束——正确的表达式必须在后缀的9个字符前面,明确指定那个位置是1,而不是让它变成任意字符。

内容的提问来源于stack exchange,提问作者Padmapriya

火山引擎 最新活动