Php 如何在CSS中查找所有@viewport块
我正在尝试使用regexp在css文件中查找所有@viewport(包括@ms viewport等)块:Php 如何在CSS中查找所有@viewport块,php,regex,Php,Regex,我正在尝试使用regexp在css文件中查找所有@viewport(包括@ms viewport等)块: /@.*?viewport.*?\}/ms 我预期的结果如下: @viewport { ... } 但是这个regexp返回最长的结果,包括从第一次出现@到viewport块的css文件的一部分,即。e、 : @media (min-width ... @viewport { ... } 我在@和视口之间使用惰性量词*?,但得到的结果最大。我的错误在哪里?使用[^@]*来匹配任何非@的
/@.*?viewport.*?\}/ms
我预期的结果如下:
@viewport { ... }
但是这个regexp返回最长的结果,包括从第一次出现@
到viewport
块的css文件的一部分,即。e、 :
@media (min-width ... @viewport { ... }
我在
@
和视口之间使用惰性量词*?
,但得到的结果最大。我的错误在哪里?使用[^@]*
来匹配任何非@
的字符,而不是*?
/@[^@]*viewport.*?\}/ms
这里,我们将从一个简单的表达式开始,在@
之后加上破折号-
边界:
$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);
因此,第一个*?
不应跳过空白。如果是这样,请使用“谢谢”!尝试使用更激烈的变体/@[a-zA-Z\-]*?viewport.*}/ms
-效果不错!它将在以下情况下失败:@-不管什么废话@媒体(最小宽度…@viewport{…}