Я хочу извлечь числа из строки в 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', );
Вы должны читать несколько о регулярных выражениях, это не сложно сделать так, если вы знаете, как они работают. Сделайте вашу жизнь проще. 😉