php - 递归公式中的 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);
,但它没有正确返回我。
有人对这个正则表达式有任何了解吗?
解决方案
我会推荐正则表达式/(?<=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 上看到。
推荐阅读
- javascript - 如何将错误栏链接到 R 中具有高图表的列系列?
- go - 在 Golang 中将 RSA 密钥编组到 PKCS #5
- laravel - 后续请求中未传递访问令牌(Laravel 和 Vue SPA 的 websanova/vue-auth)
- api - 错误 HTTP 500.19 - 内部服务器错误 (0x8007000d)
- node.js - Typescript - 节点 js - const 声明中缺少初始化程序
- reactjs - 如何在 FieldArray 的对象中正确写入单选按钮值?
- perl - 如何确定执行的 ghostscript 命令是否在 Perl 中返回错误?
- char - 当我声明一个 int、double 和 char 时发生了什么;我为 int 输入一个 double,为一个 double 输入一个 int?似乎它把事情分开了
- performance-testing - 在负载测试期间随机输入 URL
- javascript - 动态填充的控件不会触发事件 - jQuery 3.6.0