如何编写正则表达式匹配r两侧长度对称的特定文本模式
匹配'r'两侧模式长度一致的正则表达式方案
你需要匹配的是字符r左右两侧分别由it和ti重复相同次数组成的字符串,比如itrti(1次it对应1次ti)、ititrtiti(2次it对应2次ti),但要排除两侧重复次数不同的情况,比如itrtiti(1次it对应2次ti)。之前用的(it)+r(ti)+只要求两侧至少出现一次,无法限制次数一致,以下是可行的解决方案:
方案1:正则配合代码逻辑(通用所有引擎)
先用基础正则匹配结构框架:
^((it)+)r((ti)+)$
然后在代码中检查左侧捕获组(对应(it)+的内容)和右侧捕获组(对应(ti)+的内容)的长度是否相等——因为每个it和ti都是2个字符,长度相等就意味着重复次数完全一致。
举个JavaScript的例子:
const regex = /^((it)+)r((ti)+)$/; const testStr = "ititrtiti"; const match = testStr.match(regex); if (match && match[2].length === match[4].length) { console.log("匹配成功"); } else { console.log("匹配失败"); }
方案2:纯正则(依赖引擎扩展)
如果使用支持捕获组长度引用的引擎(比如Perl),可以直接用正则完成校验:
^((it)+)r(ti)+$ && length($1) == length($3)
如果使用支持递归匹配的引擎(比如PCRE、Python的regex库),可以用递归正则绑定两侧的重复次数:
^(?=(it)+r(ti)+$)(?:it){1,}r(?:ti)\1$(*SKIP)(*FAIL)|^(it)(?1)*r(ti)(?3)*$
方案3:硬编码次数(简单场景)
如果你的使用场景中,it/ti的重复次数是有限的(比如最多3次),可以直接枚举所有符合条件的模式:
^itrti$|^ititrtiti$|^itititrtititi$
内容的提问来源于stack exchange,提问作者Michael Hayford
相关产品推荐
相关产品推荐

