php - 如何使用递归 PCRE 正则表达式匹配嵌套 css?
问题描述
我正在尝试使用递归 PCRE php regex 从嵌套的 css 代码(字符串)中恢复单个结果:
<?php
//no recursive
$string = '{ color: #888; }';
$regex = "/\{(.+)\}/";
preg_match_all($regex, $string, $matches);
var_dump($matches);
//attempt to be recursive
$pattern = '/{(?:[^{}]+|(?R))*}/';
$string = "
body { color: #888; }
@media print { body { color: #333; } }
code { color: blue; }
";
$regex = "/\{(.+|(?R))\}/";
preg_match_all($regex, $string, $matches);
var_dump($matches);
预期的结果将类似于:
array(4) {
[0]=>
string(12) "color: #888;"
[1]=>
string(21) "body { color: #333; }"
[2]=>
string(12) "color: #333;"
[3]=>
string(12) "color: blue;"
}
但是,使用当前的正则表达式,我无法做到这一点:(
出于教学/学习目的,我确实需要使用(?R)来获得这些匹配项。
我怎样才能做到这一点?
解决方案
推荐阅读
- javascript - 如何更改 js 以获取地点和地址自动完成?
- visual-foxpro - 如何将 Foxpro 7 查询结果导出为 CSV 或 XLS
- php - SSL 的 Google Recaptcha V2 问题
- python - 安装 Plotly 后 Jupyter Notebook 突然变慢了
- android - 在 Delphi 10.3 Rio 中写入外部 SD 卡
- spatstat - 如何在 spatstat 中以 1 km 分辨率进行点过程模型
- winapi - UpdateLayeredWindowIndirect 函数的更新区域是什么?
- javascript - 此代码的输出必须是 john james 和 rose。但 joh 出现在输出中。为什么?
- docker - Docker 守护进程写入 syslog 但为什么
- assembly - 使用 x86 或 x86_64 程序集反转字符串的最简洁方法是什么?