Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在CSS中查找所有@viewport块_Php_Regex - Fatal编程技术网

Php 如何在CSS中查找所有@viewport块

Php 如何在CSS中查找所有@viewport块,php,regex,Php,Regex,我正在尝试使用regexp在css文件中查找所有@viewport(包括@ms viewport等)块: /@.*?viewport.*?\}/ms 我预期的结果如下: @viewport { ... } 但是这个regexp返回最长的结果,包括从第一次出现@到viewport块的css文件的一部分,即。e、 : @media (min-width ... @viewport { ... } 我在@和视口之间使用惰性量词*?,但得到的结果最大。我的错误在哪里?使用[^@]*来匹配任何非@的

我正在尝试使用regexp在css文件中查找所有@viewport(包括@ms 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{…}