PHP Извлечение чисел из строки

Я хочу извлечь числа из строки в PHP, например:

если строка = 'make1to6', я хотел бы извлечь числовой символ до и после подстроки 'to' во всей строке. т.е. 1 и 6 должны быть извлечены

Я буду использовать эти возвращаемые значения для некоторых вычислений ». я хотел бы извлечь числовой символ до и после подстроки 'to' во всей строке. т.е. 1 и 6 должны быть извлечены

Длина строки не фиксирована и может иметь длину не более 10 символов. Число может содержать максимум две цифры по обе стороны от «до» в строке.

Некоторые примерные значения строк:

sure1to3 ic3to9ltd anna1to6 joy1to4val make6to12 ext12to36 

думая о чем-то вроде:

 function beforeTo(string) { return numeric_value_before_'to'_in_the_string; } function afterTo(string) { return numeric_value_after_'to'_in_the_string; } 

Я буду использовать эти возвращаемые значения для некоторых вычислений.

Вы можете использовать регулярное выражение как таковое, оно должно соответствовать вашей спецификации:

 $string = 'make6to12'; preg_match('{^.*?(?P<before>\d{1,2})to(?P<after>\d{1,2})}m', $string, $match); echo $match['before'].', '.$match['after']; // 6, 12 

Вы можете использовать preg_match_all для достижения этого:

 function getNumbersFromString($str) { $matches = array(); preg_match_all("/([0-9]+)/",$str,$matches); return $matches; } $matches = getNumbersFromString("hej 12jippi77"); 

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

 // $str holds the string in question if (preg_match('/(\d+)to(\d+)/', $str, $matches)) { $number1 = $matches[1]; $number2 = $matches[2]; } 

Вы можете использовать регулярные выражения.

 $string = 'make1to6'; if (preg_match('/(\d{1,10})to(\d{1,10})/', $string, $matches)) { $number1 = (int) $matches[1]; $number2 = (int) $matches[2]; } else { // Not found... } 
 <?php $data = <<<EOF sure1to3 ic3to9ltd anna1to6 joy1to4val make6to12 ext12to36 EOF; preg_match_all('@(\d+)to(\d+)@s', $data, $matches); header('Content-Type: text/plain'); //print_r($matches); foreach($matches as $match) { echo sprintf("%d, %d\n", $match[1], $match[2]); } ?> 

Для этого необходимы регулярные выражения – вы можете сопоставить несколько экземпляров очень специфических шаблонов и вернуть их в массив. Это очень здорово, правда говорят 🙂

Посмотрите здесь, как использовать встроенные методы регулярного выражения в php: LINK

И вот фантастический инструмент для тестирования регулярных выражений: LINK

 <?php list($before, $after) = explode('to', 'sure1to3'); $before_to = extract_ints($before); $after_to = extract_ints($after); function extract_ints($string) { $ints = array(); $len = strlen($string); for($i=0; $i < $len; $i++) { $char = $string{$i}; if(is_numeric($char)) { $ints[] = intval($char); } } return $ints; } ?> 

Регулярное выражение кажется ненужным здесь, поскольку все, что вы делаете, это проверка is_numeric() против кучки символов.

Используйте preg_match с регулярным выражением, которое будет извлекать номера для вас. Что-то вроде этого должно сделать трюк для вас:

 $matches = null; $returnValue = preg_match('/([\d+])to([\d+])/uis', 'ic3to9ltd', $matches); 

После этого $matches будет выглядеть так:

 array ( 0 => '3to9', 1 => '3', 2 => '9', ); 

Вы должны читать несколько о регулярных выражениях, это не сложно сделать так, если вы знаете, как они работают. Сделайте вашу жизнь проще. 😉