Как я уже упоминал в ответе лицея, его код не будет работать в неанглийской локали Windows, потому что тогда выходные данные mode
могут не содержать подстрок «столбцы» или «строки»:
Вы можете найти правильную подстроку без поиска текста:
preg_match('/---+(\n[^|]+?){2}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
Обратите внимание, что я даже не беспокоюсь о строках, потому что они ненадежны (и я на самом деле их не волную).
Изменить: Согласно комментариям о Windows 8 (о, вы ...), я думаю, что это может быть более надежным:
preg_match('/CON.*:(\n[^|]+?){3}(?<cols>\d+)/', `mode`, $matches);
$cols = $matches['cols'];
Проверьте это, хотя, потому что я не проверял это.