Как найти все блоки @viewport в CSS - PullRequest
1 голос
/ 08 июня 2019

Я пытаюсь найти все блоки @viewport (включая @ -ms-viewport и т. Д.) В css-файле с регулярным выражением:

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

Ожидаю такие результаты, как:

@viewport { ... }

Но это регулярное выражение возвращает самые длинные результаты, включая часть файла CSS из первого вхождения блока @ в viewport, то есть:

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

Я использую ленивый квантификатор *? между @ и viewport, но получаю самый большой результат.Где моя ошибка?

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

Вместо .*?, используйте [^@]*, чтобы сопоставить любой символ, который не @

/@[^@]*viewport.*?\}/ms
0 голосов
/ 08 июня 2019

Здесь мы начнем с простого выражения с тире - после знака @:

$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);

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...