php正则表达式preg_match获取css类,id和标签

时间:2015-07-11 10:23:27

标签: php css regex preg-replace preg-match

我有以下css代码

thead 
{
    /*some code*/
}
tr,img {
    /*some code*/
}
@page {
    /*some code*/
}
p,h2,h3 {
    /*some code*/
}
h2,h3 {
    /*some code*/
}
img {
    /*some code*/
}

我想要使用php正则表达式preg_match或preg_replace与img相关的所有css。 例如,如果我搜索img,则必须显示以下输出

tr,img {
    /*some code*/
}
img {
    /*some code*/
}

php代码

$str='img{  } .class_class { } #awesome_id{ }';
$search='img';
$str = preg_replace("~{(."$search".)}~s","", $str);
$arr = array_filter(explode(' ',$str));
print_r($arr);

1 个答案:

答案 0 :(得分:0)

您可以使用此代码:

$re = '/.*\bimg\b.*?{(?s:.*?)}/i'; 
$str = "thead \n{\n    /*some code*/\n}\ntr,img {\n    /*some code*/\n}\n@page {\n    /*some code*/\n}\np,h2,h3 {\n    /*some code*/\n}\nh2,h3 {\n    /*some code*/\n}\nimg {\n    /*some code*/\n}"; 
preg_match_all($re, $str, $matches);

这是regex demo

说明:

  • .* - 在
  • 之前匹配除换行符之外的任何字符,0或更多次
  • \bimg\b - 一个字面的整个单词img(由于i标志而不区分大小写)
  • .*? - 任何字符,但换行符,0或更多,但尽可能少
  • { - 文字{
  • (?s:.*?) - 任何字符甚至是换行符(由于(?s:)内联标记)但尽可能少
  • } - 文字}