我试图使用正则表达式从css文件中获取类。我需要在匹配字符串的开始和结束之间进行类,因为大多数类都使用相同的前缀开始,例如myy-
classname,后跟其规则,因此我将{
作为终点,因为我只需要取类名。
例如
.myy-foobar{
/*CSS Rules goes here*/
}
.myy-anotherbar{
/*CSS Rules goes here*/
}
现在我需要使用正则表达式使用 foobar,anotherbar ,所以我使用了这个preg_match_all
preg_match_all('/^myy-[(.*)]{$/', $file, $match);
var_dump($match);
根据我的理解,它应该从myy开始 - 所以我将^myy-
和任何字符放在此之间,因此我使用[]
并以{so i used {$
和这个
preg_match_all('/(myy-)(.*)({)/', $file, $match);
var_dump($match);
这里的逻辑也是一样的(从myy-和任何字符开始,以{结尾)我尝试了不同的语法,但没有任何帮助。
文件中有很多类,所以我只需要占用所有类的中间部分,因为我已经知道了前缀。
有人可以为此提供帮助吗?
答案 0 :(得分:3)
要仅匹配名称,请使用\.myy-\K[^{\s]+(?=\s*{)
$regex = '~\.myy-\K[^{\s]+(?=\s*{)~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);
查看 the Regex Demo 中的匹配项。
<强>解释强>
\.myy-
匹配.myy-
\K
告诉引擎放弃与其返回的最终匹配项目匹配的内容[^{\s]+
匹配任何不是{
或空白字符的字符(这是匹配)(?=\s*{)
断言接下来是可选的空白字符和{
要匹配整个班级,请使用:\.myy-.*?}
$regex = '~\.myy-.*?}s~';
preg_match_all($regex, $yourstring, $matches);
print_r($matches[0]);
最长匹配。贪婪的.*
首先匹配整个字符串,然后仅在需要时回溯以允许下一个令牌匹配。因此,您经常会超出您希望比赛结束的地方(最长匹配)。
最短匹配。懒惰.*?
(由?
制作&#34;懒惰&#34;)表示该点只匹配所需的字符数允许下一个标记匹配(最短匹配)。
<强>参考强>
答案 1 :(得分:1)
以下代码会与.myy-
后的文字相匹配,直至下一个{
符号
preg_match_all('~\.myy-\K[^{]*(?={)~', $file, $match);
var_dump($match);
或强>
以下代码会与.myy-
后的文字相匹配,直至下一个{
符号或:
符号。
preg_match_all('~\.myy-\K[^{:]*(?={|:)~', $file, $match);
var_dump($match);
<强>解释强>
\.myy-
匹配字符串.myy-
\K
会丢弃之前匹配的字符。[^{]*
匹配任何不是{
零次或更多次的字符。(?={)
只有当以下字符必须是{
开放式大括号时,(?=)
才会被称为正面预测