preg_replace()标记名称

时间:2018-03-13 07:59:54

标签: php css regex laravel preg-replace

我的CSS文件包含许多标签,一些字符串:

p{
    margin:10px 0;
    padding:0;
}
h1,h2,h3,h4,h5,h6{
    display:block;
    margin:0;
    padding:0;
}

我试着这个:

#content p{
        margin:10px 0;
        padding:0;
    }

#content h1,
#content h2,
#content h3,
#content h4,
#content h5,
#content h6{
        display:block;
        margin:0;
        padding:0;
    }

我尝试找到这样的:([^\n|,{]*\n+)但获取标签的主体,但不是标签的名称。 我的想法 - 我需要找到}\n,

1 个答案:

答案 0 :(得分:0)

preg_replace_callback是你的朋友:

$css = <<<EOD
p{
    margin:10px 0;
    padding:0;
}
h1,h2,h3,h4,h5,h6{
    display:block;
    margin:0;
    padding:0;
}
EOD;

$result = preg_replace_callback(
    '/\n?([\w,\h]+)(?=\{)/',
    function ($m) {
        $l = preg_replace('/\w+\h*,?/', "#content $0\n",$m[0]);
        return $l;
    },
    $css
);
echo $result;

<强>输出:

#content p
{
    margin:10px 0;
    padding:0;
}
#content h1,
#content h2,
#content h3,
#content h4,
#content h5,
#content h6
{
    display:block;
    margin:0;
    padding:0;
}

<强>解释

\n?         : optional linefeed
(           : start group 1
  [\w,\h]+  : 1 or more word character or horizontal space
)           : end group
(?=\{)      : positive lookahead, make sure we have a curly brace after

第二个正则表达式:

\w+         : 1 or more word character
\h*         : 0 or more horizontal space
,?          : optional comma