求匹配数字N后跟任意N个字符的正则表达式,修正现有写法错误
匹配「数字N后跟任意N个字符」的正确正则表达式
问题分析
你之前使用的(\d+).{\1}存在两个核心问题:
- 未用锚点限定整个字符串,可能触发非预期的部分匹配;
- 多数正则引擎中,
{\1}会被解析为字面字符{、捕获组内容、},而非将捕获组的数值作为重复次数,因此会错误匹配3l{3}、10k{10}这类带大括号的字符串。
正确正则写法
^(\d+).{$1}$
写法说明
^和$:锚点,强制匹配整个字符串,杜绝部分匹配的情况;(\d+):捕获一个或多个数字作为N;.{$1}:匹配任意N个字符,其中$1会引用前面捕获到的数字作为重复次数。
验证结果
- 匹配成功:
1n(1位数字+1个字符)、2dg(1位数字+2个字符)、6iut5.u(1位数字+6个字符)、49875(1位数字+4个字符); - 匹配失败:
3l{3}(总长度5≠1+3)、10k{10}(总长度6≠2+10)。
内容的提问来源于stack exchange,提问作者Vahag Chakhoyan
相关产品推荐
相关产品推荐

