Php 正则表达式:获取css类、ID和标记
我有模式来获取css代码的选择器,它们是.classes、#ids和html标记。我使用Php 正则表达式:获取css类、ID和标记,php,html,css,regex,Php,Html,Css,Regex,我有模式来获取css代码的选择器,它们是.classes、#ids和html标记。我使用preg_match将它们排序到一个数组中,只需选择符的名称即可 所发生的事情是,我只得到第一个选择器两次,一次是带括号的,另一次是不带括号的 这是$contect: body{color:black;}.class_class{color:#fff;font:tahoma;}#awesome#id{} 结果如下: 代码如下: 您可以使用此正则表达式~{(.*)}~ 如果关闭支架和下一个选择器之间没有空间,
preg_match
将它们排序到一个数组中,只需选择符的名称即可
所发生的事情是,我只得到第一个选择器两次,一次是带括号的,另一次是不带括号的
这是$contect
:
body{color:black;}.class_class{color:#fff;font:tahoma;}#awesome#id{}
结果如下:
代码如下:
您可以使用此正则表达式
~{(.*)}~
如果关闭支架和下一个选择器之间没有空间,则此操作无效。如果将“”作为preg_replace中的第二个参数,即使在这种情况下也应该可以使用。@Dexa,当前正则表达式正在按照OP的要求工作,如果您想修改,请随时编辑我的答案。:)娜哈,我不会编辑它,只是想到了一件可以帮上忙的小事情。如果我在选择器之间划破了线,那就不行了。@AbdullahSalma,我已经添加了
s
修饰符,请参见代码。因此,它也将匹配换行符<代码>$str=preg_replace(“~{(.*?}~s)”,“”,$str)代码>考虑改用DOM解析器。
Array
(
[0] => body{
[1] => body
)
<?php
#Patterns
$selectors = "/(\.?\#?-?[_a-zA-Z]+[_a-zA-Z0-9-]*\s*)\{/";
#Sort
preg_match($selectors, $content, $_selectors);
?>
<pre>
<?php
print_r($_selectors);
?>
</pre>
Array
(
[0] => body
[1] => .class_class
[2] => #awesome_id
)
<?php
$str='body{ color: black; } .class_class { color: #fff; font: tahoma; } #awesome_id{ }';
$str = preg_replace("~{(.*?)}~s","", $str);
$arr = array_filter(explode(' ',$str));
print_r($arr);
Array
(
[0] => body
[1] => .class_class
[3] => #awesome_id
)