使用正则表达式捕获以管道符号分隔的数字

3
我需要从一个以"|"分隔的字符串中提取数字(id)。 以下是一个示例字符串:
|98|34|2|{"flag":"CHART"}

这是似乎有效的表达式(用于第一个数字).
^\|(\d+)\|

问题在于这只捕获了第一个数字。
我不知道如何使此正则表达式重复自身,直到达到“{”符号。帮助将不胜感激!
请告诉我是否有更有效的方法来完成此操作(在php中)。

如何使用 explode() 函数来分割字段,然后根据其预期类型处理这些字段呢?正则表达式是一种工具,但并不总是最适合完成任务的工具... - Ulrich Eckhardt
这个可以工作,但是当我需要过滤所有结果时,如果我的JSON包含“|”符号,那就会有问题。 - Buster
你为什么要混合使用不同的元格式呢?为什么不全程使用JSON呢?但是,如果|包裹字段的数量是恒定的,可以使用第三个(可选)参数来提取这些字段并保留其余部分。 - Ulrich Eckhardt
1个回答

2

使用\G锚点,可以在上一个匹配结束的地方开始下一次匹配。

(?:^\||\G)\|?(\d+)(?=\|)

DEMO


它没有捕获最后的 4 - anubhava
是的,因为它紧挨着花括号。 - Avinash Raj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接