Ответ 1
Извините за то, что присоединился к подземелью поздно, вместо использования Regex, я бы предложил вам использовать PHP, встроенный в функции, который может быть быстрее, чем Regex.
например. для получения только чисел из заданной строки
<?php
$a = '[email protected]+dk9.0$3e8`~]\]2';
$number = str_replace(['+', '-'], '', filter_var($a, FILTER_SANITIZE_NUMBER_INT));
// Output is 390382
?>
Чтобы придерживаться более строгих стандартов для вашего вопроса, я обновил свой ответ, чтобы дать лучший результат.
Я добавил str_replace, поскольку флаг FILTER_SANITIZE_NUMBER_FLOAT
или INT
не будет вырезать символы +
и -
из строки, потому что они являются частью правила исключения PHP.
Хотя он сделал бит фильтра длинным, но теперь он имеет меньше шансов на неудачу или дает неожиданные результаты, и это будет быстрее, чем REGEX.
Edit:
1: Понял, что с FILTER_SANITIZE_NUMBER_FLOAT
PHP не будет лишать эти символы необязательно .,eE
, следовательно, чтобы получить только чистые числа, используйте FILTER_SANITIZE_NUMBER_INT
2: Если у вас версия PHP меньше 5.4, то любезно используйте array('+', '-')
вместо синтаксиса короткого массива ['+', '-']
.