regex - 验证字符串 # 后跟数字,但 # 在每次出现后增加
问题描述
我有一个字符串看起来像这样
#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
匹配反向引用的指令,否则匹配 null\1
#
: 匹配一个额外的#
)
: 结束捕获组 #1\d+
: 匹配 1+ 位
)++
:结束非捕获组。匹配此非捕获组的 1+。$
: 结尾
推荐阅读
- c# - C#:调整图像大小时缩放图形的问题
- html - 如何匹配 Outlook 中电子邮件签名中两个表格的宽度?
- hibernate - 休眠单个实体的两个 @OneToMany 关系在 UPDATE 之前触发两个 SELECT 查询
- typescript - 如何使用量角器自动化“键盘访问”以进行可访问性测试?
- javascript - 使用名称引用的动态变量
- go - 如何应用 Kubernetes 工作负载
- javascript - 如何使倒计时可与对象重用?
- javascript - How state works in react
- reactjs - 无法弄清楚为什么 onClick 句柄不起作用。它说“idC”未定义
- android - recyclerview 不使用 kotlin 在片段中显示 sqlite 产品数据?