验证字符串#后跟数字,但每次出现后都会增加

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

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

#以任何数字开头,后跟任何数字,每次#出现时,#增加的次数,第一次为 1,第二次为 2,以此类推。

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

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

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

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

有效的

  • #123
  • #12##235
  • #1234##12###368
  • #1234##12###368####22235#####723356

无效的

  • ##123
  • #123###456
  • #123##456##789

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

回答

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

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

正则表达式演示

正则表达式详情:

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

回答

一个选项可以是可选地将反向引用匹配到组 1 内的组 1,使用所有格量词 1?+#在每次迭代时添加 #。

^(?:(1?+#)d+)++$
  • ^ 字符串的开始
  • (?: 非捕获组
    • (1?+#)d+捕获第 1 组,将可选的所有格反向引用与第 1 组中已捕获的内容相匹配,并添加匹配的 a#后跟 1+ 数字
  • )++ 关闭非捕获组并占有重复1+次
  • $ 字符串结束

正则表达式演示


以上是验证字符串#后跟数字,但每次出现后都会增加的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>