如何编写正则表达式匹配两个相同字符a或b之间的内容
正则实现方案
你可以使用带反向引用的正则实现需求,根据匹配目标选择对应写法:
- 如果需要匹配包含前后a/b边界在内的完整片段,正则为:
/([ab])(.*?)\1/g - 如果只需要提取两个相同边界中间的内容,直接取匹配结果的第二个捕获组即可。
- 如果要求两个边界之间至少有1个字符(不允许
aa/bb这类相邻同字符的空匹配),将正则修改为:/([ab])(.+?)\1/g
规则说明
([ab]):第一个捕获组,匹配起始边界,仅允许是字符a或b(.*?):第二个捕获组,非贪婪匹配任意长度任意字符,会尽可能少地匹配内容,直到碰到后续符合规则的结束边界\1:反向引用第一个捕获组的匹配结果,强制要求结束边界和起始边界是同一个字符(同a或同b)- 末尾的
g是全局匹配修饰符,会找出字符串中所有符合要求的片段,而非仅返回第一个匹配结果
注意:默认正则规则中
.不会匹配换行符,如果待匹配内容可能包含换行,需要添加s(dotall)修饰符,写法为/([ab])(.*?)\1/gs
测试用例匹配验证
accccca:起始捕获a,末尾找到对应a边界,中间匹配ccccc,整体匹配成功bfffffb:起始捕获b,末尾找到对应b边界,中间匹配fffff,整体匹配成功azzzzzb:起始捕获a后找不到对应a结束边界,无合法b起始边界,匹配失败bttttta:起始捕获b后找不到对应b结束边界,无合法a起始边界,匹配失败ammbmma:起始捕获a,遍历到字符串末尾找到对应a边界,中间匹配mmbmm,从开头a到末尾a的完整片段匹配成功bllalla:开头的b向后查找无对应b边界,继续遍历到第四个字符a,在字符串末尾找到对应a边界,中间匹配ll,仅两个a之间的片段匹配成功
内容的提问来源于stack exchange,提问作者Nicryc
相关产品推荐
相关产品推荐

