PHP:正则表达式匹配不忽略二级/三级结束括号

问题描述

我在下面有一个字符串,从 PHP: Explode comma outside of brackets 的输出开始。

Plum and Raspberry Jam (Glucose-Fructose Syrup,Plum Purée,Sugar,Raspberry Puree,Gelling Agent (Pectin),Acid (Citric Acid),Acidity Regulator (Sodium Citrates,Thiamin (B3)),Colour (Anthocyanins),Preservative (Potassium Sorbate),Flavouring) [23%]

我正在尝试获取 top 级别的括号,因此输出如下:

[0] => "Plum and Raspberry Jam"
[1] => "Glucose-Fructose Syrup,Flavouring"
[2] => "23%"

到目前为止我一直在使用的正则表达式,它适用于其他情况,但不适用于此处:

preg_match_all('~\((.*?)\)|\[.*?]~',"Plum and Raspberry Jam (Glucose-Fructose Syrup,Flavouring) [23%]",$matches)

正如您在 https://regex101.com/r/RzUs8E/1 处看到的那样,它开始匹配第一级括号,但如果找到第二级或第三级右括号,它会在此处停止。

我也试过 \((.*?)\).\[.*?],但如果第一个顶级括号是 [ 而不是 (,它不会匹配。

示例数据:

  • 李子和覆盆子果酱(葡萄糖-果糖糖浆、李子酱、糖、覆盆子酱、胶凝剂(果胶)、酸(柠檬酸)、酸度调节剂(柠檬酸钠、硫胺素 (B3))、色素(花青素)、防腐剂(山梨酸钾),调味剂)[23%]
  • 李子和覆盆子果酱(葡萄糖-果糖糖浆、李子酱、糖、覆盆子酱、胶凝剂(果胶)、酸(柠檬酸)、酸度调节剂(柠檬酸钠、硫胺素 (B3))、色素(花青素)、防腐剂(山梨酸钾)、调味剂)(23%)
  • 李子和覆盆子果酱 [葡萄糖-果糖糖浆、李子酱、糖、覆盆子酱、胶凝剂(果胶)、酸(柠檬酸)、酸度调节剂(柠檬酸钠、硫胺素 (B3))、色素(花青素)、防腐剂(山梨酸钾)、调味剂] (23%)
  • 李子和覆盆子果酱 [23%](葡萄糖-果糖糖浆、李子酱、糖、覆盆子酱、胶凝剂(果胶)、酸(柠檬酸)、酸度调节剂(柠檬酸钠、硫胺素 (B3))、色素(花青素)、防腐剂(山梨酸钾)、调味剂)
  • 李子和覆盆子果酱 [23%] [葡萄糖-果糖糖浆、李子酱、糖、覆盆子酱、胶凝剂(果胶)、酸(柠檬酸)、酸度调节剂(柠檬酸钠、硫胺素 (B3))、色素(花青素)、防腐剂(山梨酸钾)、食用香料]
  • 李子和覆盆子果酱 (23%)(葡萄糖-果糖糖浆、李子酱、糖、覆盆子酱、胶凝剂(果胶)、酸(柠檬酸)、酸度调节剂(柠檬酸钠、硫胺素 (B3))、色素(花青素)、防腐剂(山梨酸钾)、调味剂)
  • 李子和覆盆子果酱 (23%) [葡萄糖-果糖糖浆、李子酱、糖、覆盆子酱、胶凝剂(果胶)、酸(柠檬酸)、酸度调节剂(柠檬酸钠、硫胺素 (B3))、色素(花青素)、防腐剂(山梨酸钾)、食用香料]

非常感谢任何帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...