gpt4 book ai didi

php - PCRE:为代码块找到匹配的大括号

转载 作者:可可西里 更新时间:2023-10-31 22:08:02 24 4
gpt4 key购买 nike

有没有办法让 PCRE 正则表达式计算一个字符出现的次数 (n),并在找到另一个字符出现 n 次后停止搜索(特别是 {}).

这是为了抓取代码块(里面可能有也可能没有嵌套的代码块)。

如果它更简单,输入将是一个单行字符串,除了大括号之外的唯一字符是数字、冒号和逗号。在尝试提取代码块之前,输入必须通过以下标准:

$regex = '%^(\\d|\\:|\\{|\\}|,)*$%';

所有大括号都有一对匹配,并且正确嵌套。

在我开始编写脚本来检查字符串中的每个字符并计算大括号的每次出现次数之前,我想知道这是否可以实现。正则表达式对内存更友好,因为这些字符串的大小可能有几千字节!

谢谢,mniz。

解决方案

PCRE: Lazy and Greedy at the same time (Possessive Quantifiers)

最佳答案

pcre 有 recursive patterns , 所以你可以做这样的事情

$code_is_valid = preg_match('~^({ ( (?>[^{}]+) | (?1) )* })$~x', '{' . $code .'}');

另一件事,我不认为这会比简单的计数器更快或更少的内存消耗,尤其是在大字符串上。

这就是如何在字符串中找到所有(有效)代码块

preg_match_all('~ { ( (?>[^{}]+) | (?R) )* } ~x', $input, $blocks);
print_r($blocks);

关于php - PCRE:为代码块找到匹配的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2348547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com