首页 > 解决方案 > 如何使用递归 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)来获得这些匹配项。

我怎样才能做到这一点?

标签: phpregexpcrerecursive-regex

解决方案


推荐阅读