咨询正则表达式(0|10)*可接受的字符串范围
正则表达式
(0|10)*匹配的字符串详解 嘿,这个问题问得特别好!我来给你把这个正则的匹配逻辑拆解明白,顺便解答你关于010能不能匹配的疑问~
首先,先拆解这个正则的核心结构:
(0|10)是一个选择分组,意思是这个位置要么匹配单个字符0,要么匹配连续的两个字符10;- 后面的
*是量词,表示前面的分组可以重复0次、1次或者无限多次(包括空字符串的情况)。
能匹配的字符串类型
简单来说,所有可以通过把0和10这两个单元任意顺序、任意次数拼接起来的字符串,都能被这个正则匹配,举几个典型例子:
- 空字符串(因为
*允许分组匹配0次) - 单个
0,或者多个0拼接:0、00、000... - 单个
10,或者多个10拼接:10、1010、101010... 0和10混合拼接:比如你问的010(先匹配0,再匹配10)、100(先10再0)、0100(0+10+0)、10010(10+0+10)等等,这些都完全符合规则。
不能匹配的字符串
反过来,只要字符串里出现了无法被0或10单元拆解的部分,就匹配失败,比如:
- 单个
1(没有任何分支能匹配单独的1) 01(0之后的1无法匹配,也没有分支对应01)110(开头的两个1里,第一个1就找不到匹配的单元)011(末尾的两个1无法拆解)
所以你之前的误解是把分组的重复逻辑想窄啦,(0|10)*不是只能匹配单个0或单个10,而是可以把这两个单元随便组合重复,010当然是完全可以被匹配的哦~
内容的提问来源于stack exchange,提问作者Anony
相关产品推荐
相关产品推荐

