如何在CSS中找到所有@viewport块

时间:2019-06-08 13:17:04

标签: php regex

我正在尝试使用正则表达式在css文件中查找所有@viewport(包括@ -ms-viewport等)块:

/@.*?viewport.*?\}/ms

我希望得到这样的结果:

@viewport { ... }

但是此正则表达式返回最长的结果,包括从第一次出现的@viewport块i的部分css文件。 e。:

@media (min-width ... @viewport { ... }

我在*?@之间使用了惰性量词viewport,但获得了最大的结果。我的错误在哪里?

2 个答案:

答案 0 :(得分:2)

使用.*?而不是[^@]*来匹配非@的任何字符

/@[^@]*viewport.*?\}/ms

答案 1 :(得分:0)

在这里,我们将以一个简单的表达式开始,该表达式在-之后有一个破折号@

$re = '/@(-.+)?viewport.+?\}/ms';
$str = '@media (min-width ... @viewport { ... }@media (min-width ... @viewport { ... }

@media (min-width ... @viewport { ... }

@media (min-width ... @-ms-viewport { ... }';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

Demo