PHP Найти позицию и значение последней цифры в строке

$string = "hello 31 84 1 546 today 77 is 4 good";

Как получить позицию последнего "4"?

Как получить значение "4"?

4 ответа

Ваш вопрос непонятен, но я думаю, что это то, что вы ищете?

$string = "hello 31 84 1 546 today 77 is 4 good";
if(preg_match_all('/\d+/', $string, $numbers))
 $lastnum = end($numbers[0]);
  1. Согласование всех сгруппированных целых чисел в вашей строке
  2. Поместите их в массив.
  3. Последний элемент массива - это последнее число в предложении.

РЕДАКТИРОВАТЬ:

Как говорит @Michael в комментарии:

И, возможно, если требуется OP, удалите последнюю цифру из многозначного числа - например, если она закончилась с 49 хорошими, substr(), чтобы получить 9, что является технически последней цифрой, а не 49, поскольку это вернется. Неясный вопрос.


Вот ответ:

$s1 = "hello 31 84 1 546 today 77 is 894 good";

if(preg_match_all('/\d+/', $s1, $numbers)){

 $lastFullNum = end($numbers[0]); //eg. "894"
 $lastDigit = substr($lastFullNum, -1); //eg. "4"
 $lastDigitPos = strrpos($s1, $lastDigit, 0); //eg. "32"

}


Вы можете использовать preg_match чтобы получить последнюю цифру (ы), определяющую "последний" как "эту точку, откуда не должно быть больше цифр", т.е. "Она не цифрами (\ D) до конца строки ( $) ":

preg_match('#(\\d+)\\D*$#', $string, $gregs);

Теперь $gregs[1] содержит последнюю цифру s. (Если вы хотите только последний, опустите символ "+"). Вам может понадобиться многострочный модификатор, если строка содержит возврат каретки.

Чтобы получить смещение strrpos вам понадобится strrpos:

$offset = strrpos($string, $gregs[1]);

Или вы можете использовать опцию PREG_OFFSET_CAPTURE для preg_match:

if (false !== preg_match('#(\\d+)\\D*$#', $string, $gregs, PREG_OFFSET_CAPTURE)) {
 list ($digit, $offset) = $gregs[1];
}


Пример массива;

<!--?php
 $s1 = "hello 31 84 1 546 today 77 is 894 good";
 $array = explode(' ',$s1);
 echo end($array) . '<br /-->';
 echo prev($array) . '';
?>

licensed under cc by-sa 3.0 with attribution.