标签:php curly-braces nested pcre codeblocks
有没有办法让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,curly-braces,nested,pcre,codeblocks 来源: https://codeday.me/bug/20190610/1213773.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。