首页 > 解决方案 > 验证字符串 # 后跟数字,但 # 在每次出现后增加

问题描述

我有一个字符串看起来像这样

#123##1234###2356####69

它以任何数字开头#并后跟任何数字,每次#出现,#增加的次数,第一次1,第二次2,等等。

它类似于这个正则表达式,但由于我不知道这种模式会持续多久,所以它不是很有用。

^#\d+##\d+###\d+$

我正在使用 PCRE 正则表达式引擎,它允许递归(?R)和条件(?(1)...)等。

是否有正则表达式来验证这种模式?

有效的

无效的

我试过^(?(1)(?|(#\1)|(#))\d+)+$了,但它似乎根本不起作用

标签: regexpcre

解决方案


您可以使用PCRE 条件子模式匹配来做到这一点:

^(?:((?(1)\1)#)\d+)++$

正则表达式演示

正则表达式详细信息:

  • ^: 开始
  • (?::启动非捕获组
    • (: 开始捕获组 #1
      • (?(1)\1):表示仅当第一个捕获组可用时才if/then/else匹配反向引用的指令,否则匹配 null\1
      • #: 匹配一个额外的#
    • ): 结束捕获组 #1
    • \d+: 匹配 1+ 位
  • )++:结束非捕获组。匹配此非捕获组的 1+。
  • $: 结尾

推荐阅读