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

Php 使用正则表达式捕获管道符号分隔的数字,php,regex,Php,Regex,我需要从“|”分隔的字符串中捕获数字(ID), 这是一个示例字符串: |98|34|2|{"flag":"CHART"} 这是一个似乎有效的表达式(对于第一个数字) 问题是,这只捕获第一个数字 我不知道如何使这个正则表达式在到达“{”符号之前重复自身。 谢谢你的帮助 请告诉我是否有更有效的方法(在php中)使用\G锚点在上次匹配结束的同一字符串上开始下一次匹配 (?:^\||\G)\|?(\d+)(?=\|) 它没有捕获最后一个4是,因为它在大括号旁边。那么explode()呢拆分字段,然后

我需要从“|”分隔的字符串中捕获数字(ID), 这是一个示例字符串:

|98|34|2|{"flag":"CHART"}
这是一个似乎有效的表达式(对于第一个数字)

问题是,这只捕获第一个数字

我不知道如何使这个正则表达式在到达“{”符号之前重复自身。 谢谢你的帮助


请告诉我是否有更有效的方法(在php中)

使用
\G
锚点在上次匹配结束的同一字符串上开始下一次匹配

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

它没有捕获最后一个
4
是,因为它在大括号旁边。那么
explode()呢
拆分字段,然后根据字段的预期类型处理字段?正则表达式是一种工具,但它们并不总是执行任务的最佳工具……这是可行的,但当我的JSON包含“|”时,我需要过滤所有结果符号这将是一个问题。为什么要混合不同的元格式?为什么不一直使用JSON呢?尽管如此,如果
|
-包装字段的数量是常量,请使用第三个(可选)参数仅提取这些字段,并保持其余字段不变。
(?:^\||\G)\|?(\d+)(?=\|)