Вы можете сопоставить диапазоны с пробелами внутри, и после того, как вы получите массив с ними, удалите все виды пробелов.
Чтобы извлечь диапазоны, регулярное выражение может выглядеть как
'~\d+(?:\s*-\s*\d+)?~'
См. Демоверсию regex .\d+(?:\s*-\s*\d+)?
будет соответствовать 1+ цифрам с последующей необязательной последовательностью -
, заключенной в 0+ пробелов, а затем 1+ цифр.
В PHP:
$targets = "1- 6;20; 20-4,71100 12";
if (preg_match_all('~\d+(?:\s*-\s*\d+)?~', $targets, $m)) {
print_r(preg_replace('~\s+~', '', $m[0]));
};
preg_replace('~\s+~', '', $m[0])
удалит все пробелы из совпадений.
Если у вас может быть пробел Unicode, добавьте модификатор u
к вызову preg_replace
:
preg_replace('~\s+~u', '', $m[0])
Вывод:
Array
(
[0] => 1-6
[1] => 20
[2] => 20-4
[3] => 71100
[4] => 12
)