предполагая, что у меня есть эти тексты «x34», «150px», «650dpi», «e3r4t5» … как я могу получить только числа? я имею в виду, что я хочу 34, 150, 650, 345 без какого-либо другого персонажа. Я имею в виду, что числа, которые эта строка имеет в одной переменной.
Извините за то, что позже присоединился к группе, вместо использования Regex, я предлагаю вам использовать встроенные функции PHP, которые могут быть быстрее, чем Regex.
filter_var
флаги для фильтров
например, чтобы получить только числа из данной строки
<?php $a = '!ab.c3@j+dk9.0$3e8`~]\]2'; $number = str_replace(['+', '-'], '', filter_var($a, FILTER_SANITIZE_NUMBER_INT)); // Output is 390382 ?>
Чтобы придерживаться более строгих стандартов для вашего вопроса, я обновил свой ответ, чтобы дать лучший результат.
Я добавил str_replace, поскольку FILTER_SANITIZE_NUMBER_FLOAT
или флаг INT
не будут FILTER_SANITIZE_NUMBER_FLOAT
символы +
и -
от строки, потому что они являются частью правила исключения PHP.
Хотя он сделал бит фильтра длинным, но теперь он имеет меньше шансов потерпеть неудачу или дать неожиданные результаты, и это будет быстрее, чем REGEX.
Редактировать:
1: Понял, что с FILTER_SANITIZE_NUMBER_FLOAT
PHP не будет FILTER_SANITIZE_NUMBER_FLOAT
эти символы .,eE
, следовательно, чтобы получить только чистые числа, используйте FILTER_SANITIZE_NUMBER_INT
2: Если у вас версия PHP менее 5.4 , то любезно используйте array('+', '-')
вместо синтаксиса коротких массивов ['+', '-']
.
$str = "e3r4t5"; $str_numbers_only = preg_replace("/[^\d]/", "", $str); // $number = (int) $str;
Вы можете использовать регулярное выражение для удаления любого символа, который не является цифрой:
preg_replace('/\D/', '', $str)
Здесь шаблон \D
описывает любой символ, который не является цифрой (дополнение к \d
).
Используйте функции PHP FILTER, если вы используете PHP 5.2.X, 5.3.x, 5.4. Его очень рекомендуется
$mixed_input = "e3r4t5"; $only_numbers = filter_var($mixed_input, FILTER_SANITIZE_NUMBER_INT);
Пройдите по этой ссылке, чтобы узнать больше
Замените все, что не является числом, и используйте это значение.
$str = "foo1bar2baz3"; $num = intval(preg_replace("/[^0-9]/", "", $str));
Вы можете использовать следующую функцию
function extract_numbers ($ string) {
preg_match_all ('/ ([\ d] +) /', $ string, $ match);
return $ match;
}