首页 > 解决方案 > 递归公式中的 PHP 正则表达式

问题描述

我有个人的表达:

GREATER (5.26; 7; LESSER (3.00; 6; GREATER (7; 8)))

我想要一个正则表达式,该函数将返回包含带分隔符的括号的内容,例如将“GREATER”作为表达式传递,正则表达式将返回一个数组

[0] => 5.26; 7
[1] => 7; 8

我正在使用这个正则表达式preg_match_all("/\((([^()]*|(?R))*)\)/", $valor, $matches);,但它没有正确返回我。

有人对这个正则表达式有任何了解吗?

标签: phpregex

解决方案


我会推荐正则表达式/(?<=GREATER\s\()([\d.]+)(?:;\s)([\d.]+)/g

打破这个:

  • (?<=GREATER\s\()- 是否积极回顾GREATER (
  • ([\d.]+)- 抓取任何跟随此的数字和点,并将它们分组
  • (?:;\s)- 处理但不分组;和空间
  • ([\d.]+)- 抓取任何跟随此的数字和点,并将它们分组

为此需要全局标志 ( g) 以针对每个集合。

逆着弦跑GREATER (5.26; 7; LESSER (3.00; 6; GREATER (7; 8)))

这给出了:

array(3
    0 => array(2
        0 => 5.26; 7
        1 => 7; 8
    )
    1 => array(2
        0 => 5.26
        1 => 7
    )
    2 => array(2
        0 => 7
        1 => 8
    )
)

这允许您访问在第一个分组中继续单词的“组合”两个集合,GREATER此外还可以将后续分组中的集合分开(以便于访问)。

这可以在 PHPLiveRegex 上看到


推荐阅读