我有一个看起来像这样的字符串
#123##1234###2356####69
Run Code Online (Sandbox Code Playgroud)
它#以任何数字开头,后跟任何数字,每次#出现时,#增加的次数,第一次为 1,第二次为 2,以此类推。
它类似于这个正则表达式,但由于我不知道这种模式持续了多长时间,所以它不是很有用。
^#\d+##\d+###\d+$
Run Code Online (Sandbox Code Playgroud)
我正在使用 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+)++$
Run Code Online (Sandbox Code Playgroud)
正则表达式详情:
^: 开始(?:: 启动非捕获组
(:开始捕获组#1
(?(1)\1):if/then/else指令表示\1仅当第一个捕获组可用时才匹配反向引用,否则匹配 null#: 匹配一个额外的 #):结束捕获组#1\d+: 匹配 1+ 个数字)++: 结束非捕获组。匹配此非捕获组的 1+。$: 结尾一个选项可以是可选地将反向引用匹配到组 1 内的组 1,使用所有格量词 \1?+#在每次迭代时添加 #。
^(?:(\1?+#)\d+)++$
Run Code Online (Sandbox Code Playgroud)
^ 字符串的开始(?: 非捕获组
(\1?+#)\d+捕获第 1 组,将可选的所有格反向引用与第 1 组中已捕获的内容相匹配,并添加匹配的 a#后跟 1+ 数字)++ 关闭非捕获组并占有重复1+次$ 字符串结束| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |