Извлечь числа из строки

Я хочу извлечь числа из строки, содержащей числа и буквы, такие как:

"In My Cart : 11 items" 

Я хочу здесь получить номер 11 или любой другой номер.

 $str = 'In My Cart : 11 12 items'; preg_match_all('!\d+!', $str, $matches); print_r($matches); 

Если вы просто хотите отфильтровать все, кроме цифр, проще всего использовать filter_var :

 $str = 'In My Cart : 11 items'; $int = filter_var($str, FILTER_SANITIZE_NUMBER_INT); 
 preg_replace('/[^0-9]/', '', $string); 

Это должно сделать лучше работу ..!

Использование preg_replace :

 $str = '(111) 111-1111'; $str = preg_replace('/\D/', '', $str); echo $str; 

Выход: 1111111111

Для плавающих чисел,

 preg_match_all('!\d+\.*\d*!', $string ,$match); 

У меня нет для этого кредита, но я просто должен поделиться им. Это регулярное выражение будет получать числа из строки, включая десятичные точки / места, а также запятые:

/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/

Процитировано здесь:
php – regex – как извлечь число с десятичной точкой (точка и запятая) из строки (например, 1,120.01)?

Вы можете использовать preg_match :

 $s = "In My Cart : 11 items"; preg_match("|\d+|", $s, $m); var_dump($m); 

Использование preg_replace

 $str = 'In My Cart : 11 12 items'; $str = preg_replace('/\D/', '', $str); echo $str; 

Вы можете использовать следующую функцию:

 function extract_numbers($string) { preg_match_all('/([\d]+)/', $string, $match); return $match[0]; } 
 preg_match_all('!\d+!', $some_string, $matches); $string_of_numbers = implode(' ', $matches[0]); 

Первый аргумент в implode в этом конкретном случае говорит «отделить каждый элемент в совпадениях [0] с одним пробелом». Implode не будет помещать пробел (или любой другой ваш первый аргумент) до первого числа или после последнего числа.

Что-то еще, что нужно отметить, это $ matches [0], где найден массив совпадений (которые соответствуют этому регулярному выражению).

Для дальнейшего уточнения того, что другие индексы в массиве см. В: http://php.net/manual/en/function.preg-match-all.php

попробуйте это, используйте preg_replace

 $string = "Hello! 123 test this? 456. done? 100%"; $int = intval(preg_replace('/[^0-9]+/', '', $string), 10); echo $int; 

DEMO

Используйте эту функцию в PHP для извлечения любого количества одной строки

 /** * Return the all number in a array * @param {string} $string * * @return {array} */ function number_in_string($string){ try { if (!is_string($string)) throw new Exception("Error : Param Type"); preg_match_all("/\d+/", $string, $matches); // Return the all coincidences return $matches[0]; } catch (Exception $e) { echo $e->getMessage(); } } 

Вызовите функцию

 $numbers = number_in_string("a-25-65_52"); 

воспроизводить

 array(3) { [0]=> string(2) "25" [1]=> string(2) "65" [2]=> string(2) "52" } 

Распечатайте один элемент массива echo, для этого примера

 echo $numbers[0]; // 25 echo $numbers[1]; // 65 echo $numbers[2]; // 52 

другой способ (unicode string even):

 $res = array(); $str = 'test 1234 555 2.7 string ..... 2.2 3.3'; $str = preg_replace("/[^0-9\.]/", " ", $str); $str = trim(preg_replace('/\s+/u', ' ', $str)); $arr = explode(' ', $str); for ($i = 0; $i < count($arr); $i++) { if (is_numeric($arr[$i])) { $res[] = $arr[$i]; } } print_r($res); //Array ( [0] => 1234 [1] => 555 [2] => 2.7 [3] => 2.2 [4] => 3.3 ) 

В зависимости от вашего варианта использования это также может быть вариант:

 $str = 'In My Cart : 11 items'; $num = ''; for ($i = 0; $i < strlen($str); $i++) { if (is_numeric($str[$i])) { $num .= $str[$i]; } } echo $num; // 11 

Хотя я бы согласился с регулярным выражением или filter_var() было бы более полезно в заявленном случае.

для utf8 str:

 function unicodeStrDigits($str) { $arr = array(); $sub = ''; for ($i = 0; $i < strlen($str); $i++) { if (is_numeric($str[$i])) { $sub .= $str[$i]; continue; } else { if ($sub) { array_push($arr, $sub); $sub = ''; } } } if ($sub) { array_push($arr, $sub); } return $arr; }