目前我有以下情况:
我正在尝试“解析”一个文本,寻找占位符(他们的符号是“{…}”),稍后,我将用实际文本替换它们.
我想到了正则表达式
$foo = "Hello World {foo{bar}} World Hello!";
$bar = array();
preg_match_all('@\{.+\}@U', $foo, $bar);
var_dump($bar);
但这会回来
array(1) { [0]=> array(1) { [0]=> string(9) "{foo{bar}" } }
让它变得贪婪会导致:
array(1) { [0]=> array(1) { [0]=> string(10) "{foo{bar}}" } }
但我希望结果如下:
array(1) { [0]=> array(2) { [0]=> string(5) "{bar}" [1]=> string(10) "{foo{bar}}" } }
有没有办法在preg_match(_all)和正则表达式的帮助下达到这个目的?
或者我必须一次又一次地循环我的$bar,直到结果集中没有剩余的子语句?
解决方法:
你很幸运,你有PCRE.这必须使用递归来解决:http://regex101.com/r/pO3hA0
/(?=({(?> [^ {}] |(?1))}))/ g(你不需要php中的g标志)
标签:php,regex,preg-match-all 来源: https://codeday.me/bug/20190630/1331877.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。