Как вырезать только нужные цифры?

Есть строка типа

.class { width: 10px !important } .class2 {max-width:100px;} .class3 { width: 20px; }

Мне нужно получить только цифры 10 и 20 , то есть те которые идет после width: и до px, но если перед width стоит символ - , значит его пропускаем.

У меня лишь удалось составить такое выражение:

preg_match_all('!width:(.+?)px!si', $str, $arr);

Но оно не работает так как мне бы хотелось...

Например, оно может извлечь мне почти всю строку от width: и до первого px, соостветвенно туда попадают остальные символы, а мне нужны только цифры если после них были символы px

Буду очень благодарен за помощь!


Ответы (2 шт):

Автор решения: InDevX
$str = '.class { width: 10px !important } .class2 {max-width:100px;} ';
$str .= ' .class3 { width:   20px; } .class3 { width: -20px; }';

preg_match_all('!(?<!-)width:(\s*([1-9]\d+)\s*)px!si', $str, $arr);

print_r($arr[2]);
→ Ссылка
Автор решения: Эдуард

Добавьте ретроспективную проверку: ~(?<!-)width:\h*\K\d+(?=px)~


UPD: На PHP будет так:

$str = '.class { width: 10px !important } .class2 {max-width:100px;} .class3 { width: 20px; }';

preg_match_all('~(?<!-)width:\h*\K\d+(?=px)~', $str, $arr);

print_r($arr[0]);

См. демо

→ Ссылка